MySQL如何用关联表SUM求和结果更新指定表字段
正确SQL写法
UPDATE ehap LEFT JOIN ( SELECT EHAP_ID, SUM(AMOUNT) AS month_total FROM beneficiaries WHERE MONTH(disbursement_date) = MONTH(CURDATE()) AND YEAR(disbursement_date) = YEAR(CURDATE()) GROUP BY EHAP_ID ) AS b_sum ON ehap.id = b_sum.EHAP_ID SET ehap.this_month = IFNULL(b_sum.month_total, 0);
原SQL执行失败的核心原因
- 不能直接在UPDATE的SET子句中使用
SUM()这类聚合函数,聚合函数需要先通过GROUP BY对关联表分组、完成预计算后才能关联更新 - 原逻辑仅用
MONTHNAME()判断月份会忽略年份差异,存在往年同月数据被错误计入统计的问题,建议同时匹配年份和月份更稳妥 - 原WHERE条件重复写了关联逻辑,属于冗余代码
可选调整说明
如果不需要更新当月无对应收支记录的ehap行,可以把LEFT JOIN改成INNER JOIN,同时去掉IFNULL判断,直接写SET ehap.this_month = b_sum.month_total即可。
内容的提问来源于stack exchange,提问作者reiniel lagman
相关产品推荐
相关产品推荐

