假定以下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

最佳答案

(gameslists.id is NULL)查询中,表达式INNER JOIN永远不能为真(假设id是主键)。这就是为什么第一个结果集不包含任何行的原因。

另一方面,只要ONLEFT JOIN子句不匹配,则该特定行的gameslists字段将为NULL。因此,第二个查询将返回所有未出现在games中的gameslists,除非memberid351

关于mysql - 以下查询是否应产生相同的结果? (MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3696768/

10-10 04:01