[前][次][番号順一覧][スレッド一覧]

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]