MW211 EXIT

devlog
SQL/左外部結合の勘違い
2011年10月12日
なにも左外部結合に限った話ではなく、右外部結合も同じなのだが
右外部結合はあんまり使わないので、左外部結合で話をすすめる。

左外部結合を使うシチュエーションというのは、
キーと値が1対1の定数的な関係のテーブルを参照する場合が多い。

コード(キー)はわかっているので、それを文字(値)に変換したい場合だ。
例えば、「1→北海道」「2→青森県」みたいな感じ。

なのでたいていの場合、キーは主キー(もしくは一意キー)であり、
該当するレコードは1件(もしくは0件)だ。

これに慣れてしまうと、左外部結合は1件だけキーを値に変換してくれる
変換関数的なイメージをもってしまう。

もし、キーが同一なものが2件あった場合は?
(例えば「201→青森市」「201→盛岡市」みたいな場合)

先頭の1件だけをひっぱってきてくれる…なんて勘違いしてませんか?

いやいや、SQLの結合の基本は直積なので、左外部結合も直積なのです。
つまり参照元のレコードが2倍に増殖してしまう。

ま、あんまりそんなシチュエーションには出くわさないのだけど
たまにだから、驚いてしまう。
分類:SQL