どうもコウタロウです。
今日はタイトルについて。
外部結合がうまくいかない原因
まずは、結論から
ズバリ!!
①ちゃんと結合条件が指定されてない
②外部結合の条件なのにWhere句に入ってる
絶対に上記のどちらか、若しくは両方が原因で想定通りに結果が取得できてない。
※IT業界15年のベテランである私もたまに勘違いしてうまくいかないと悩むことがあります。
こうすればうまくいく
それではうまくいく例を見て、その例と自分が困っていることの乖離を見れば良くないところがわかるでしょう!!
今回は3つのテーブルを例にとります。
①table_a
②table_b
table_aと比べるとrowId=’r003’レコードが多いですね。
table_aを外部結合
はい。table_aを左側にLeft Joinします。
つまりtable_aを主にする。
groupId、kubunId、rowIdを結合するとtable_a(3行)とtable_b(4行)の結果は
3行となります。
table_aに存在するレコードのみ取得できる!!
table_bを外部結合
次にtable_bを左側にLeft Joinします。
今度は table_bを主にする。
さっきと違い今度は4行取得できました!!
結論
もし、結合条件がちゃんとしてなかったら4行取得できないし
条件の一部がWhere句に存在しても4行取得できません。
複雑なSQLになるとついつい条件の漏れなどで想定通りに取得できないケースが多々出てくると思います。
そんな時は焦らず条件を1つずつ見直して下さい。
外部結合する主テーブルを必ず条件に入れれば想定通り取得することができます!!
コメント