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

SQL

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つずつ見直して下さい。

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

    コメント

    タイトルとURLをコピーしました