
データを取得するテーブルが2つある場合、検索すると、ほとんどが、JOINが書かれています。
でも、JOINは、テーブルをLEFTまたは、RIGHTという風に、横に繋げる手法です。
今回は、縦に繋ぎたくて、1日ほど悩んがあげく、UNIONを使えば良いという事がわかったので、備忘録しておきます。
やりたいこと
JOINは、横結合なので、つなぎ合わせるid値などを連結させて、1つのレコードとして組み合わせにする機能です。
JOINが分からない人のために、サンプルを用意しました。
名刺管理票のようなものを想像してください。
名前
会社名
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
名前-2テーブル : User_2
縦結合
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は省略できます)