フリーランス チャレンジ!!

フリーランス チャレンジ!!

週休4日制に俺はなる!

外部結合(Left Join)でうまくいかない時に見直す2つのポイント

f:id:ksakae1216:20171119192701p:plain

どうもコウタロウです。

 

今日はタイトルについて。

 

 

外部結合がうまくいかない原因

まずは、結論から

 

ズバリ!!

 

①ちゃんと結合条件が指定されてない

②外部結合の条件なのにWhere句に入ってる

 

絶対に上記のどちらか、若しくは両方が原因で想定通りに結果が取得できてない。

※IT業界15年のベテランである私もたまに勘違いしてうまくいかないと悩むことがあります。

 

こうすればうまくいく

それではうまくいく例を見て、その例と自分が困っていることの乖離を見れば良くないところがわかるでしょう!!

 

今回は3つのテーブルを例にとります。

table_a

f:id:ksakae1216:20171119185731j:plain

 

table_b

table_aと比べるとrowId='r003'レコードが多いですね。

f:id:ksakae1216:20171119190100j:plain

 

table_aを外部結合

f:id:ksakae1216:20171119190944j:plain

はい。table_aを左側にLeft Joinします。

つまりtable_aを主にする。

groupId、kubunId、rowIdを結合するとtable_a(3行)とtable_b(4行)の結果は

3行となります。

 

table_aに存在するレコードのみ取得できる!!

 

table_bを外部結合

f:id:ksakae1216:20171119191732j:plain

次にtable_bを左側にLeft Joinします。

今度は table_bを主にする。

 

さっきと違い今度は4行取得できました!!

 

結論

もし、結合条件がちゃんとしてなかったら4行取得できないし

条件の一部がWhere句に存在しても4行取得できません。

 

複雑なSQLになるとついつい条件の漏れなどで想定通りに取得できないケースが多々出てくると思います。

 

そんな時は焦らず条件を1つずつ見直して下さい。

外部結合する主テーブルを必ず条件に入れれば想定通り取得することができます!!