mysql:2360
From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Tue, 08 Aug 2000 18:06:20 +0900
Subject: [mysql 02360] Re: JOIN の ON 節の制限は?
とみたです。 At Tue, 8 Aug 2000 13:58:26 +0900 (JST), Yokota Takehiko <takehiko@xxxxxxxxxx> wrote: > そこで質問なのですが、 > ・ON 節には複数の条件式をAND演算子でつないだような式(a.mid=b.mid AND > a.cid=1 AND b.uid=1 のような)を書いてもよいのか?(mySQLマニュアル > には、ON conditional_expr と書かれているので、よさそうに思えますが…。) いいです。 > ・書いてよいなら、なぜSQL(1)は期待通りの動作をしないのか?仮に、結合 > に関係するフィールドだけしかON節には書いてはいけないのならば、なぜ > SQL(2)は期待通りの動作をするのか?(たまたま?) おそらく LEFT OUTER JOIN の ON の使い方を誤解しているのではないかと思い ます。 LEFT OUTER JOIN の場合は、左側のテーブルのレコードは全て選択されます。右 側のテーブルは ON 条件に適合したレコードは結合され、適合したレコードが無 い場合は NULL で埋められたレコードが結合されます。 以下の結果は理解できますか? mysql> select * from a left join b on a.mid=b.mid; +-----+-----+------+------+ | mid | cid | mid | uid | +-----+-----+------+------+ | 1 | 1 | 1 | 1 | | 1 | 1 | 1 | 2 | | 2 | 1 | 2 | 1 | | 2 | 1 | 2 | 2 | | 3 | 1 | 3 | 2 | | 4 | 2 | 4 | 1 | | 5 | 2 | 5 | 1 | | 6 | 3 | NULL | NULL | +-----+-----+------+------+ 8 rows in set (0.00 sec) mysql> select * from a left join b on a.mid=b.mid and a.cid=1; +-----+-----+------+------+ | mid | cid | mid | uid | +-----+-----+------+------+ | 1 | 1 | 1 | 1 | | 1 | 1 | 1 | 2 | | 2 | 1 | 2 | 1 | | 2 | 1 | 2 | 2 | | 3 | 1 | 3 | 2 | | 4 | 2 | NULL | NULL | | 5 | 2 | NULL | NULL | | 6 | 3 | NULL | NULL | +-----+-----+------+------+ 8 rows in set (0.00 sec) mysql> select * from a left join b on a.mid=b.mid and a.cid=1 and b.uid=1; +-----+-----+------+------+ | mid | cid | mid | uid | +-----+-----+------+------+ | 1 | 1 | 1 | 1 | | 2 | 1 | 2 | 1 | | 3 | 1 | NULL | NULL | | 4 | 2 | NULL | NULL | | 5 | 2 | NULL | NULL | | 6 | 3 | NULL | NULL | +-----+-----+------+------+ 6 rows in set (0.00 sec) -- とみたまさひろ <tommy@xxxxxxxxxx> http://www.tmtm.org 日本MySQLユーザ会 http://www.mysql.gr.jp
2359 2000-08-08 13:58 [Yokota Takehiko <tak] JOIN の ON 節の制限は? -> 2360 2000-08-08 18:06 ┗[とみたまさひろ <tomm] 2362 2000-08-08 19:12 ┗[Yokota Takehiko <tak]