MySQL 5.7关联查询:如何包含无评论的企业记录
MySQL 5.7 查询所有企业及对应评论数(含无评论企业)
我使用MySQL 5.7版本,拥有firms(企业表)和firm_reviews(企业评论表)两张表,需要查询所有企业及其对应的评论数量,即使企业没有任何评论也需将其纳入结果集。
原使用的SQL语句如下:
select count(*) as review_count, fr.org_id, f.name from firm_reviews fr right join firms f on fr.org_id = f.org_id group by org_id order by review_count desc;
但该语句无法返回无评论的企业,请问该如何修改?
解决方案
调整后的SQL语句可实现需求:
select f.org_id, f.name, count(fr.org_id) as review_count from firms f left join firm_reviews fr on f.org_id = fr.org_id group by f.org_id order by review_count desc;
原语句问题解析
- 计数逻辑错误:原语句使用
count(*)会统计所有匹配行,包括右连接后fr.org_id为NULL的无评论企业行,导致这类企业的review_count被错误统计为1而非0。改用count(fr.org_id)会自动忽略NULL值,无评论时返回0,符合需求。 - 分组与字段选择问题:原语句以
fr.org_id分组并返回该字段,当企业无评论时fr.org_id为NULL,不仅分组逻辑存在风险,还会导致结果中企业ID为NULL。应改为以f.org_id分组并返回该字段,确保企业ID的正确性。 - 连接逻辑优化:从
firms表出发做左连接firm_reviews,逻辑上更直观——以所有企业为基础关联评论,天然覆盖无评论的企业,相比右连接更易理解和维护。
内容的提问来源于stack exchange,提问作者timpone
相关产品推荐
相关产品推荐

