[MySQL] UNIONとJOINを組み合わせて使う

公開

スポンサーリンク

SQL文でUNIONとJOINを組み合わせて使う場合の覚え書きです。

必要あって書いたのはこんなSQLです。

SELECT *
FROM main_table AS m
INNER JOIN (
    SELECT foo_table.id, foo_table.name
    FROM foo_table
    LEFT OUTER JOIN foo_meta_table
    ON foo_table.id = foo_meta_table.id
  UNION ALL
    SELECT bar_table.id, bar_table.name
    FROM bar_table
    LEFT OUTER JOIN bar_meta_table
    ON bar_table.id = bar_meta_table.id
) AS u
ON m.id = u.id
WHERE m.title = 'hoge'

INNER JOINで結合する対象のテーブルをUNION ALLで結合してテーブル”u”(AS u)として扱っています。そのUNION ALLで結合した2つのテーブルはLEFT OUTER JOINで結合を行っています。合計4つのテーブルを1つのテーブルとしてメインのテーブルにマージしているわけですね。

気をつけるのはUNIONで結合する際、SELECT句に指定するカラムのデータ型とカラム数が一致するようにすることでしょうか。

スポンサーリンク


Comment