読者です 読者をやめる 読者になる 読者になる

投資家たぬきちのブログ

地方×都会のデュアルライフとシンプルライフを実践する、兼業投資家のたぬきちだよ

SELECT文で条件分岐で、データがあればなければのSQL! - CASE文で同一項目をAがあった場合Aからとってきて、なかった場合Bからとってくる方法(Oracle)

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)
ミック
翔泳社
売り上げランキング: 17,226