Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

UNION句を久しぶりに使ったのでメモ

テストデータを整備するのに、YというテーブルのIDを外部キーとして持っているA〜Dのテーブルのレコードを集めて1つの表にする必要がありました。

こういう時はUNIONの出番です。

select 
  zzz.id,
  zzz.name
from (
  selct 
    y.id,
    y.name,
  from
     y_table as y
     join a_table as a on a.y_id = y.id --A_table
  union
  selct 
    y.id,
    y.name,
  from
     y_table as y
     join b_table as b on b.y_id = y.id --B_table
  union
  selct 
    y.id,
    y.name,
  from
     y_table as y
     join c_table as c on c.y_id = y.id --C_table
  union
  selct 
    y.id,
    y.name,
  from
     y_table as y
     join b_table as d on d.y_id = y.id --D_table
  ) as zzz

派生テーブルにしておけばorder_byもwhere句も使えます。zzzの後に。

ただ、MYSQLの場合はUNIONした結果をFROM句に持ってくるのはサブクエリでしか無いので、WHEREをFROM句の外に書いてしまうと爆裂重くなるかもしれません。その時はUNIONしたい集合をはじめからWHEREで絞りましょう。

SQLを学習できるWebサービスを作りました。

www.start-sql.net