SELECT文で同一項目を二つのテーブルから条件分岐してとってくる方法でつまづいたときに、ネット上にいいものがなかったので記事にした。
データがあればなければのSQL文であるが、SELECT分でもう少し細かい方法が知りたかったのだ。
それは、SELECT分で条件分岐として、同一項目をAが合った場合Aからとってきて、なかった場合Bからとってくる方法である。
これはCASE分で実現できる。
以下に例文を書く。 Aをもとに、BとCのテーブルを結合して引っ張ってくるSQLであるが、 AのTANUKICHIとRASCALという項目を、BのIDがAのIDと同一であったらBを入れ、違ったらAをそのまま入れるという文である。
つまり、Aのあるレコードに対して、そのレコードに対応する項目がBにあったら、Bを入れ、なかったらAを入れる文である。 (ちなみに、AとBはIDとNAMEの二つをキーとして結合させる想定。Cも同様)
SELECT A.ID, A.NAME, C.CD
CASE B.ID WHEN A.ID THEN B.TANUKICHI ELSE A.TANUKICHI END AS TANUKICHI,
CASE B.ID WHEN A.ID THEN B.RASCAL ELSE A.RASCAL END AS RASCAL
FROM TableA A
LEFT OUTER JOIN TableB B ON B.ID= A.ID AND B.NAME = A.NAME
LEFT OUTER JOIN TableC C ON C.ID = A.ID AND C.NAME = A.NAME
となる。
ぜひご参考に。
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)posted with amazlet at 14.01.06ミック
翔泳社
売り上げランキング: 17,226