結合条件内でcaseを使う
検証はSQLiteでやっているので他の環境でも使えるかと
テーブル作成
CREATE TABLE "subtable" ( "date1" TEXT, "date2" TEXT, "date3" TEXT, "flg" TEXT ); CREATE TABLE "maintable" ( "dateval" TEXT, "value" TEXT );
データ投入
insert into subtable ('date1','date2','date3','FLG') values ('20210101','20210201','20210301','1'); insert into subtable ('date1','date2','date3','FLG') values ('20210103','20210203','20210303','2'); insert into subtable ('date1','date2','date3','FLG') values ('20210104','20210205','20210305','3'); insert into maintable ('dateval','value') values ('20210101','101'); insert into maintable ('dateval','value') values ('20210203','203'); insert into maintable ('dateval','value') values ('20210305','305'); commit;
FLGの値によってmaintableの条件を切り替える
select maintable.value,subtable.flg,maintable.dateval from maintable inner join subtable on 1 = 1 and case when subtable.FLG = '1' THEN maintable.dateval = subtable.date1 when subtable.FLG = '2' THEN maintable.dateval = subtable.date2 ELSE maintable.dateval = subtable.date3 end
以下のようなデータが出力される
value | flg | dateval |
---|---|---|
101 | 1 | 20210101 |
203 | 2 | 20210203 |
305 | 3 | 20210305 |