べすとえふぉーと

プログラミング等のノート 

結合条件内で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