SQL左连接搭配NOT IN子句查询无数据返回的问题排查
问题原因及解决方法
为什么原查询返回无数据?
当你用LEFT JOIN关联pages和page_likes表时,那些没有任何点赞记录的页面,对应的l.page_id字段会是NULL。而SQL的NOT IN子句只要包含NULL值,整个条件的判断结果就会变成NULL(不是TRUE),数据库会自动过滤掉这些结果,导致本该被选中的无点赞页面全部被排除,最终返回空数据集。
正确的查询写法
方法一:利用LEFT JOIN的NULL特性筛选
SELECT p.page_id FROM pages AS p LEFT JOIN page_likes AS l ON p.page_id = l.page_id WHERE l.page_id IS NULL ORDER BY p.page_id ASC;
方法二:统计点赞数筛选为0的页面
SELECT p.page_id FROM pages AS p LEFT JOIN page_likes AS l ON p.page_id = l.page_id GROUP BY p.page_id HAVING COUNT(l.page_id) = 0 ORDER BY p.page_id ASC;
内容的提问来源于stack exchange,提问作者Meenakshi
相关产品推荐
相关产品推荐

