紐付かないテーブル同士で片方がデータがなくても抽出する方法についてです。
どんなタイミングでそういうことをしたくなるのか、なかなかタイミングはないとは思うけどちょっと詰まったのでメモ。
例えば、work1というテーブルがあってこちらは0〜複数レコードが入る。
そしてwork2というテーブルには1レコードだけ確実にある状態。
で、work1の内容とwork2の内容を合わせて抽出したい。(この2つのテーブルに紐付けられる情報はない。)
また、work1が0件だったとしても、work2の1レコードの内容は表示したい。
何がやっかいかというと、テーブル間に紐付けがないというところと、
メインとなるテーブルが0〜複数件なのでこちらをFROM句に書くと何も抽出できない。
んー、紐付けられたら外部結合で簡単なんだけどね。。
今回はSQL Serverで実現。
結果、T-SQLでレコードの存在チェックで条件分岐させ、別々のSQLを実行させることにした。
早速SQLについて。
1.複数件データがある時。
CREATE TABLE #work1 (id int ,name varchar(10) ); CREATE TABLE #work2 (name2 varchar(10) ); INSERT INTO #work1 ([id], [name]) VALUES (1, 'test1'); INSERT INTO #work1 ([id], [name]) VALUES (2, 'test11'); INSERT INTO #work2 ([name2]) VALUES ('test2'); IF (EXISTS(SELECT 1 FROM #work1)) BEGIN select id,name,(select name2 from #work2) from #work1 END ELSE BEGIN select '',name2 from #work2 END
2.片方がデータが0件の時。
CREATE TABLE #work1 (id int ,name varchar(10) ); CREATE TABLE #work2 (name2 varchar(10) ); INSERT INTO #work2 ([name2]) VALUES ('test2'); IF (EXISTS(SELECT 1 FROM #work1)) BEGIN select id,name,(select name2 from #work2) from #work1 END ELSE BEGIN select '',name2 from #work2 END
やりたいことは実現できたけど、単一のSQLで実現する方法はないものか。