2010-09-12 105 views
0

假設以下MySQL表結構,爲什麼以下兩個查詢產生不同的結果?以下查詢是否應該產生相同的結果? (MySQL)

games(id) (464 records) 
members(id) (1 record, id=351) 
gameslists(id,memberid,gameid) -- (2 records, (1,351,1) and (2,351,2)) 

這會產生空

SELECT games.* 
FROM games 
INNER JOIN gameslists ON gameslists.gameid = games.id 
WHERE gameslists.memberid <> 351 AND gameslists.id is NULL 

這將產生462個記錄,這是我的期望。

SELECT games.* 
FROM games 
LEFT JOIN gameslists ON gameslists.gameid = games.id AND gameslists.memberid <> 351 
WHERE gameslists.id is NULL 

回答

3

表達(gameslists.id is NULL)永遠不能在INNER JOIN查詢真(假設id是主鍵)。這就是爲什麼第一個結果集不包含行。

另一方面,只要LEFT JOINON子句不匹配,那麼該特定行的gameslists字段將爲NULL。因此,如果memberid351,則第二個查詢將返回所有未出現在gameslists中的games

+0

謝謝Daniel! – Mohamad 2010-09-12 22:00:19

+0

@梅爾:什麼是產生錯誤? – 2010-09-12 22:00:56

+0

不是,一個錯誤,但也爲空:LEFT JOIN gameslists ON gameslists.gameid = games.id WHERE gameslists.id爲NULL AND gameslists.memberid <> 352 – Mohamad 2010-09-12 22:02:00

2

INNER JOIN返回非NULL匹配項,而可以LEFT JOIN在一側上爲NULL。我認爲這是線索。

相關問題