如何统计关联表总记录数?以discursion与response_discursion表为例
问题修复与优化方案
你的SQL语句无法运行的原因是子查询里错误使用了ON关键字,关联主表的条件应该用WHERE来指定。下面提供两种可行的解决方案:
方案一:修正子查询写法
把原SQL中的ON替换为WHERE即可正常执行:
SELECT D.ID_Discursion, D.TEXT_Discursion, Total_Response = ( SELECT COUNT(RD.ID_ResponseDiscursion) FROM response_discursion AS RD WHERE RD.ID_Discursion = D.ID_Discursion ) FROM discursion AS D;
方案二:更高效的LEFT JOIN + GROUP BY写法
如果数据量较大,子查询的性能不如JOIN方式,推荐用LEFT JOIN结合分组统计,还能保证无回复的问题也被返回(此时回复数为0):
SELECT D.ID_Discursion, D.TEXT_Discursion, COUNT(RD.ID_ResponseDiscursion) AS Total_Response FROM discursion AS D LEFT JOIN response_discursion AS RD ON RD.ID_Discursion = D.ID_Discursion GROUP BY D.ID_Discursion, D.TEXT_Discursion;
另外注意:你提供的response_discursion表表头存在笔误,两个列都命名为ID_ResponseDiscursion,实际应该是其中一个为关联问题的外键ID_Discursion,否则关联条件会失效,需要先修正表结构的这个问题。
内容的提问来源于stack exchange,提问作者Sudo Sur
相关产品推荐
相关产品推荐

