2016-02-26 50 views
2

下表(其文檔中使用MySQL),舉個例子:
MySQL的左連接它是如何工作

+---------+--------+-------+ 
| article | dealer | price | 
+---------+--------+-------+ 
| 0001 | A  | 3.45 | 
| 0001 | B  | 3.99 | 
| 0002 | A  | 10.99 | 
| 0003 | B  | 1.45 | 
| 0003 | C  | 1.69 | 
| 0003 | D  | 1.25 | 
| 0004 | D  | 19.95 | 
+---------+--------+-------+ 

,然後假設我們想在輸出獲得該行與最高價格usign以下查詢

SELECT s1.article, s1.dealer, s1.price 
FROM shop s1 
LEFT JOIN shop s2 ON s1.price < s2.price 
WHERE s2.article IS NULL; 

是其作品的權利交回表格的最後一欄(具有最高價)。
有了這個查詢我真的不明白它是如何工作的(不是左連接),但爲什麼我們有一篇文章是NULL。

我想,如果我們想要做一個左連接沒有交集,所以我們使用同樣的事情發生:

SELECT * from A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL.<br> 

但是,爲什麼我們有b.key爲空,如果我們總是有該列的值?

+0

請檢查此:http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join 一切都會做一些閱讀和觀看照片後清除。 –

+0

這張圖片doens't回答我的問題。我問爲什麼不是查詢的結果,我只知道它。 – Mattia

+1

這是我的舊答案之一,這應該清除你的懷疑http://stackoverflow.com/questions/29944271/how-does-left-join-is-null-eliminate-records-which-are-there-in-一個表和/ 29944479#29944479 唯一的區別是這個例子是有兩個表,你有一個但邏輯相同。 –

回答

0

那麼,你實際上使用比較加入兩個表:s1.price < s2.price

因此,表1的每一行都與表2中價格較高的所有行匹配。由於使用了LEFT JOIN,因此它也會返回表1中的行,表2中沒有匹配的行。並且由於我們正在尋找最高價格,因此該行正是我們正在尋找的行,價格在表2(s2.article = NULL)中沒有匹配的行,甚至更高。