假定以下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
是主键)。这就是为什么第一个结果集不包含任何行的原因。
另一方面,只要ON
的LEFT JOIN
子句不匹配,则该特定行的gameslists
字段将为NULL
。因此,第二个查询将返回所有未出现在games
中的gameslists
,除非memberid
是351
。
关于mysql - 以下查询是否应产生相同的结果? (MySQL),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3696768/