2009-12-24 140 views
2
mysql> select a.id,a.parent from qa a left join qa b on a.parent=b.parent where b.id=7; 
+----+--------+ 
| id | parent | 
+----+--------+ 
| 7 |  1 | 
| 8 |  1 | 
| 9 |  1 | 
+----+--------+ 
3 rows in set (0.00 sec) 

mysql> select a.id,a.parent from qa a left join qa b on a.parent=b.parent and b.id=7; 
+----+--------+ 
| id | parent | 
+----+--------+ 
| 1 | NULL | 
| 2 | NULL | 
| 3 | NULL | 
| 4 | NULL | 
| 5 | NULL | 
| 6 | NULL | 
| 7 |  1 | 
| 8 |  1 | 
| 9 |  1 | 
+----+--------+ 

我读完它们一样!为什么这两个陈述有不同的结果?

+0

表中有什么? '从qa'选择* – 2009-12-24 08:55:53

回答

3

第一条语句将创建连接,然后使用筛选结果,其中b.id = 7

一个其中a.parent = b.parent因此,只有行和加入结果具有b.id = 7

第二条语句将创建左与b.id = 7加入,从而包括来自QA一个所有行,然后从QA b其中b.id = 7只值。

所以从所有行,其中来自a.parent = b.parent,但显示b值只有在b.id = 7

0

你第一个查询限制右手通过自动消除可以/将返回的NULLs结果的一侧。如果您使用的是INNER JOIN,则声明会返回相同的结果。

0

首先在select语句中有一个条件(where),第二个在连接上应用b.id条件。

从文档:

如果在右边表中没有匹配行或使用零件的LEFT JOIN,设置为NULL的所有列的行用于右表。