MySQL报错Error Code: 1111 分组函数无效使用 跨库UPDATE查询问题
问题原因
- 报错的核心原因是不能直接在UPDATE语句的SET子句的未分组场景下使用SUM()这类聚合函数,MySQL的聚合函数需要明确分组维度才能计算对应聚合值,你当前的写法没有对
land_propertyassessment表按关联键landinfo_arpno做分组,MySQL无法判断按什么规则求和,就会抛出Error Code: 1111. Invalid use of group function错误。
修复方案
你需要先对land_propertyassessment表按关联键分组预计算好每个landinfo_arpno对应的总评估值,再和目标表关联做更新,修正后的SQL如下:
UPDATE erptax_db.land_superseded_assessment lsa INNER JOIN ( -- 先按关联键分组求和,得到每个arpno对应的总评估值 SELECT landinfo_arpno, SUM(landpropertyassessment_assessmentvalue) AS total_assessed_value FROM erptax_dumalinao.land_propertyassessment GROUP BY landinfo_arpno ) lp ON lp.landinfo_arpno = lsa.old_arp_no SET lsa.old_assessed_value = lp.total_assessed_value;
额外注意项
- 如果存在
land_propertyassessment表中没有对应landinfo_arpno记录的情况,你只想更新有匹配记录的行,上面的内连接写法已经满足需求;如果需要把没有匹配的行设置为0,可以改成LEFT JOIN后配合IFNULL处理。 - 执行更新前建议先单独运行子查询确认聚合结果符合预期,避免错误更新数据。
内容的提问来源于stack exchange,提问作者Herbert Yeo
相关产品推荐
相关产品推荐

