BigQueryで2つのテーブルを結合する
/
BigQueryで2つのテーブルを結合します
# テーブル
item.item_table1
id | item | prime |
---|---|---|
1 | A | 100 |
2 | B | 200 |
3 | C | 300 |
item.item_table2
id | item | prime |
---|---|---|
1 | A | 100 |
2 | B | 200 |
4 | D | 400 |
item.item_table3
id | class |
---|---|
1 | A_class |
2 | B_class |
# 縦に結合
-- 結果を結合したものを、重複ありで返します
SELECT
*
FROM
item.item_table1
UNION ALL
SELECT
*
FROM
item.item_table2;
id | item | prime |
---|---|---|
1 | A | 100 |
2 | B | 200 |
3 | C | 300 |
1 | A | 100 |
2 | B | 200 |
4 | D | 400 |
-- 結果を結合したものを、重複なしで返します
SELECT
*
FROM
item.item_table1
UNION DISTINCT
SELECT
*
FROM
item.item_table2
ORDER BY
user_id
, item
, price;
id | item | prime |
---|---|---|
1 | A | 100 |
2 | B | 200 |
3 | C | 300 |
4 | D | 400 |
# 条件付きの結合(横)
-- idが一致するものを横に結合
-- t2にないidがt1にある場合は除去される
SELECT
t1.*,
t3.class
FROM
item.item_table1 AS t1
INNER JOIN
item.item_table3 AS t3
ON
t1.id = t3.id
id | item | prime | class |
---|---|---|---|
1 | A | 100 | A_class |
2 | B | 200 | B_class |
# 条件付きの結合(横&null補正)
-- idが一致するものを横に結合
-- t2にないidがある場合は、null値で補完
SELECT
t1.*,
t3.class
FROM
item.item_table1 AS t1
LEFT JOIN
item.item_table3 AS t3
ON
t1.id = t3.id
id | item | prime | class |
---|---|---|---|
1 | A | 100 | A_class |
2 | B | 200 | B_class |
3 | C | 300 | null |