INNER JOIN と LEFT OUTER JOIN
SQLの構文でINNER JOINとLEFT OUTER JOINってのがあると思います。
複数テーブルから関連するデータを引き出すときに使用するものです。僕は今まで何の疑問も持たずINNER JOINを使用していました。ですが先日
あるテーブルのデータを削除するときに一方のテーブルにはデータがあり、もう一方のデータにはキーに関連するデータが無かった時のことです。
データの削除ができない…!
それもそのはず。INNER JOINは関連するデータがすべて揃っている場合にのみテーブルを構築するのです。なので結合先にデータが無い場合は一方のテーブルにデータがあっても結合テーブルとしては表示されないのです。
ここで悩みました。それではいちいち複数テーブルに対してDELETEのクエリを実行しなければならないのかと。
ところがこれはあっさり解決。SQLにはLEFT OUTER JOINというものが用意されており、これを使用すると結合先にキーに関連するデータが無くてもそれは空のカラムとして結合テーブルを作成してくれるのです。
知らなかった。世の中にはもっと自分が知らなくて便利なことがたくさんありそうです。
コメントを残す