Oracleの結合演算子
例えば、A、B二つの表があって、それを外部結合を使って検索する。外部結合演算子(+)を使うとこんな感じで記述できる。
SELECT * FROM A, B WHERE A.col1 = B.col1(+)
この程度は自分も知っていた。で、右側の表Bに条件を付けるとする。こう書けるのか?
SELECT * FROM A, B WHERE A.col1 = B.col1(+) AND B.col2 IN (1, 2)
いや、col2の値が1, 2以外の行は返されない。これでは外部結合にならない。
これも何となく知っていた。問題はここからだ。上記の問題をどう回避するのか。
SELECT * FROM A, B WHERE A.col1 = B.col1 (+) AND (B.col2 IN (1, 2) OR B.col2 IS NULL)
長い間こんな風に書いてきた気がするんだけど、もう少しエレガントな記述ができるようで。
SELECT * FROM A, B WHERE A.col1 = B.col1(+) AND B.col2(+) IN (1, 2)
先月手伝ってた現場でこれを知ったとき、期待通りに動作することをこっそりテストしながら、今まで知らなかった恥ずかしさと感動に浸っていた...が。
改めてOracleのリファレンスを読んでみると、結合演算子は制限があるからOUTER JOIN推奨なのだそうで。なら今後、積極的に使うこともないだろう。あぁ、何だか力抜けるなぁ...
と、仕事を通じて泣いたり笑ったりした出来事をここに残していこうかと思ってます。でも、まずは脱・3日坊主が目標。ネタに窮してyoutubeの動画を埋め込んでるだけの記事でも、コンスタントに(週一くらいで)アップするつもり。
CSSはそのうちカスタマイズしておきます。