我的查询如下:
SELECT *
FROM users U
LEFT JOIN posts P ON P.userId = U.id AND P.userId IS NOT NULL;
为什么查询还返回 userId
为 null
的结果?
我知道根据我的需要,我可以使用 INNER JOIN
来仅获取与用户相关的帖子,但是很奇怪 LEFT JOIN
支持多种条件,但无法使用NOT NULL 条件。
最佳答案
这是因为“帖子”不包含空值,因此无法在该阶段进行过滤。当服务器无法在右表中找到相应的行时,只会通过连接生成 Null 值。所以只需将 not null 放在 where 子句中就可以了:
SELECT * FROM users U LEFT JOIN posts P ON P.userId = U.id WHERE userId IS NOT NULL;
(编辑:尽管如此,您应该使用内部联接来进行高效工作,因为这是正确的方法,并且会给您带来更好的性能。)
您还可以通过反转来查看所有没有帖子的用户:
SELECT * FROM users U LEFT JOIN posts P ON P.userId = U.id WHERE userId IS NULL;
关于MySQL 在左连接条件中不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44519892/