[SQL] 2つのテーブルを結合ではなく、行で繋げるUNION記述
データを取得するテーブルが2つある場合、検索すると、ほとんどが、JOINが書かれています。
でも、JOINは、テーブルをLEFTまたは、RIGHTという風に、横に繋げる手法です。
今回は、縦に繋ぎたくて、1日ほど悩んがあげく、UNIONを使えば良いという事がわかったので、備忘録しておきます。
わかりました?
縦結合ですよ。
やりたいこと
JOINは、横結合なので、つなぎ合わせるid値などを連結させて、1つのレコードとして組み合わせにする機能です。 JOINが分からない人のために、サンプルを用意しました。 名刺管理票のようなものを想像してください。名前
ID | User |
---|---|
1 | 田中 |
2 | 鈴木 |
3 | 内藤 |
会社名
ID | User-ID | Company |
---|---|---|
1 | 1 | 株式会社A |
2 | 2 | 合同会社B |
3 | 3 | NPO社C |
結合後
ID | User | Company |
---|---|---|
1 | 田中 | 株式会社A |
2 | 鈴木 | 合同会社B |
3 | 内藤 | NPO社C |
SQL文
SELECT *
FROM User
LEFT JOIN Company ON User.id = Company = User.id
違う違う、そうじゃなく、次のようなテーブル構造を縦に並べます。
名前-1テーブル : User_1
ID | User |
---|---|
1 | 田中 |
2 | 鈴木 |
3 | 内藤 |
名前-2テーブル : User_2
ID | User |
---|---|
4 | 吉田 |
5 | 上田 |
6 | 加藤 |
縦結合
ID | User |
---|---|
1 | 田中 |
2 | 鈴木 |
3 | 内藤 |
4 | 吉田 |
5 | 上田 |
6 | 加藤 |
UNION結合
SELECT *
FROM
(
SELECT *
FROM User_1
UNION
(
SELECT *
FROM User_2
) as User
FROM句の箇所にテーブル名ではなく、サブクエリと呼ばれる、内包するSELECT文を書くことで結合させることができます。
あと、繋ぎあわあせたいテーブルの数だけUNIONを繋げればいいんですね。
UNION句の後に、as 出力名を付けるのを忘れないようにしてくださいね。(asは省略できます)