挨拶
初めまして、日本システム開発株式会社の鈴木です。
技術者として更なる向上を目指すためQiitaアウトプットをする取り組みを行っています。
技術者としては経験が浅く発信内容はとにかく試したものの覚書になります。
今回は業務上で使用した特定列の値によって左結合の結合に使用する列を変更するSQLについて備忘録をつけていきます。
要件
例として以下のようなテーブルが存在するとき
TableX
TableY
TAbleXにVALUEを元にTableYを左結合する。ただしTYPE_ABがAの時はVALUE_Aを、Bの時はVALUE_Bを参照する。
実装
今回は以下のようなSQLを作成しました。
SELECT TableX.ID,TableY.ID
FROM TableX
LEFT JOIM TableY
ON TableX.VALUE =
(CASE TableX.TYPE_AB
'A' THEN TableY.VALUE_A
'B' THEN TableY.VALUE_B
ELSE ''
)
CASE文以下がTYPE_AB列の値により比較対象の列を切り替えている部分になります。
CASEによって()内の値がVALUE_A,VALUE_B,''のいずれかになることで比較ができるようになります。例のテーブルではSQL実施結果は以下になります。
IDがA2,B3のデータは比較の際に0のVALUE値が参照され結合されません。