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 |
縦に結合
SQL
-- 結果を結合したものを、重複ありで返します
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 |
SQL
-- 結果を結合したものを、重複なしで返します
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 |
条件付きの結合(横)
SQL
-- 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補正)
SQL
-- 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 |