2008年7月30日

[mysql 14619] Re: 2段階以上の外部結合のやり方


話が変な方向になっているような。。。

> ちなみに、Oracle式に書いた場合、微妙に解釈が違うので注意が必要です。
> --
> FROM
> A, B
> WHERE

> A.hoge_id = B.id (+)
> AND B.code = '001'
> --
> これを慣れてない人は、こんな感じにOUTER JOINしてしまいます。
> --
> A
> LEFT OUTER JOIN B
> ON (
> A.hoge_id = B.id
> AND B.code = '001'
> )
> このようなOracle式書き方をそのままON句に入れると、ばっちり無視されるのでご注意を。
> ※ON句には結合条件のみが記述できるので、抽出条件は書いちゃダメ
>


「ON句に入れると、ばっちり無視される」のではなく、その条件式も結合条件として使われます。
つまり、上記の例では、B.code='001'の行のみB側に存在することになり、それ以外のBの行は存在せず、nullでAの行に結合されます。

ONでなく、WHEREに「B.code='001'」を指定すると、結合結果に対して評価されるような動きになります。
(内部的には、LEFT JOINがINNER JOINに変わる)

ONでは結合条件、WHEREでは制限条件を指定するのですが、ONで定数を値とした条件を指定するケースはありますので念のため。
_________________________________________________________________
イカ天やWe舞台のWebオーディション、夢をかなえるチャンス!詳しくはこちら
http://transform.jp.msn.com/


投稿者 xml-rpc : 2008年7月30日 17:19
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/75837
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。