SQLite中GROUP BY查询仅返回1行:articles表分组丢失数据
问题原因
你在GROUP BY时使用了右表comments的字段t2.article_id,这是导致行丢失的直接原因:
- 你使用的是
LEFT JOIN,当文章没有关联的评论时,t2.article_id的值为NULL - 在SQL的分组逻辑中,所有值为
NULL的行会被归为同一组,因此你2篇没有评论的文章最终被合并成了1组返回,只会展示其中1篇的id。
你单独指定WHERE t1.id = 'xxx'时查询结果正常,是因为过滤后仅剩下1行数据,不会触发多NULL行的分组合并逻辑。
解决方法
将分组字段改为左表articles的主键t1.id即可,该字段是非空且唯一的,不会出现分组合并的问题:
SELECT t1.id, COUNT(t2.id) AS comment_count FROM articles AS t1 LEFT JOIN comments AS t2 ON t2.article_id = t1.id GROUP BY t1.id;
执行后会返回2行结果,对应两篇文章的评论数都是0,符合预期。
内容的提问来源于stack exchange,提问作者warvariuc
相关产品推荐
相关产品推荐

