2009-12-24 133 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的所有列的行用於右表。