SQLでやりがちな外部結合のミスや誤り

最近はJOINで表結合されたSQLを多く見るようになったのであまりみかけないのですが
一世代前の人間はORACLEで外部結合するとき、(+)を使っていますよね。

私も一世代前の人間です(笑)

そんな外部結合をするときにやりがちなミスというのが↓のようなSQLです。
一見、外部結合出来ているように見えますが、実は外部結合になっていません。
実行計画を見れば明白です。

select
  a.id
  ,b.div_cd
  ,b.div_nm
from
  table1 a
  ,table b
where
  a.div_cd = b.div_cd(+)
  and b.div_cd = ‘100’
;

外部結合するときは正しくは↓です。
結合条件の他に、絞り込み条件にも(+)を付けてあげましょう。
これでミスなく外部結合されます!

select
  a.id
  ,b.div_cd
  ,b.div_nm
from
  table1 a
  ,table b
where
  a.div_cd = b.div_cd(+)
  and b.div_cd(+) = ‘100’
;

現場で使えるSQL第2版 Oracle 10 g・SQL Server 20 (DB magazine selection) [ 小野哲 ]

価格:2,376円
(2018/11/19 19:05時点)
感想(4件)