msyqlleftjoinon后面多个条件(三)
2014-11-24 15:43:42
·
作者:
·
浏览: 8
E b.id IS NULL;
你可以这样写:
| 1 |
SELECT a.* FROM product a LEFT JOIN product_details b |
| 3 |
WHERE b.id is null OR b.weight=44 OR b.exist=1 |
| 01 |
mysql> SELECT a.* FROM product a LEFT JOIN product_details b |
| 03 |
WHERE b.id is null OR b.weight=44 OR b.exist=1; |
| 11 |
3 rows in set (0.00 sec) |
你可以不这样写:
| 1 |
SELECT a.* FROM product a LEFT JOIN product_details b |
| 2 |
ON a.id=b.id AND b.weight!=44 AND b.exist!=0 |
可以这样写:
| 1 |
SELECT a.* FROM product a LEFT JOIN product_details b |
| 3 |
WHERE b.id is null OR b.weight=44 OR b.exist=0; |
| 01 |
mysql> SELECT a.* FROM product a LEFT JOIN product_details b |
| 03 |
WHERE b.id is null OR b.weight=44 OR b.exist=0; |
| 12 |
4 rows in set (0.00 sec) |
这些查询真的效果一样?
如果你只需要第一个表中的数据的话,这些查询会返回相同的结果集。有一种情况就是,如果你从 LEFT JOIN的表中检索数据时,查询的结果就不同了。
如前所属,WHERE 子句是在匹配阶段之后用来过滤的。
例如:
| 01 |
mysql> SELECT * FROM product a LEFT JOIN product_details b |
| 02 |
ON a.id=b.id AND b.weight!=44 AND b.exist=1 |
| 05 |
| id | amount | id | weight | exist | |
| 07 |
| 1 | 100 | NULL | NULL | NULL | |
| 08 |
| 2 | 200 | NULL | NULL | NULL | |
| 09 |
| 3 | 300 | NULL | NULL | NULL | |
| 10 |
| 4 | 400 | NULL | NULL | NULL | |
| 12 |
4 rows in set (0.00 sec) |
| 14 |
mysql> SELECT * FROM product a LEFT JOIN product_details b |
| 16 |
WHERE b.id IS NULL OR b.weight=44 OR b.exist=0; |
| 18 |
| id | amount | id | weight | exist | |
| 20 |
| 1 | 100 | NULL | NULL | NULL | |
| 21 |
| 2 | 200 | 2 | 22 | 0 | |
| 22 |
| 3 | 300 | NULL | NULL | NULL | |
| 23 |
| 4 | 400 | 4 | 44 | 1 | |
| 25 |
4 rows in set (0.00 sec) |
总附注:
如果你使用 LEFT JOIN 来寻找在一些表中不存在的记录,你需要做下面的测试:WHERE 部分的 col_name IS NULL(其中 col_name 列被定义为 NOT NULL),MYSQL 在查询到一条匹配 LEFT JOIN 条件后将停止搜索更多行(在一个特定的组合键下)。