如何批量更新aunames表的AUCOUNT字段?解决SQL子查询多行报错
嘿,这个问题我熟!你遇到的1242 - Subquery returns more than 1 row错误,根源在于你原来的子查询没有和外层的aunames表做关联——它会返回所有refs.id分组后的计数结果,而更新操作需要给每一行的aucount单独赋值,自然就冲突了。
给你两种靠谱的批量更新方案,任选其一就行:
方案一:用UPDATE JOIN关联更新(推荐,效率更高)
这种方式先通过子查询统计好每个ID对应的作者总数,再关联到aunames表批量更新:
UPDATE aunames a JOIN ( -- 先统计每个ID对应的引用记录数(可根据实际需求调整统计逻辑) SELECT ac.id, COUNT(r.rec) AS author_count FROM refs r JOIN aunames_copy ac ON r.id = ac.id GROUP BY ac.id ) cnt ON a.id = cnt.id SET a.aucount = cnt.author_count;
方案二:修正子查询,关联外层表
如果你更习惯用子查询的写法,只需要给子查询加一个和外层aunames的关联条件,让它每次只返回当前行ID对应的计数:
UPDATE aunames a SET aucount = ( SELECT COUNT(r.rec) FROM refs r JOIN aunames_copy ac ON r.id = ac.id WHERE ac.id = a.id -- 关键:关联外层的aunames表当前行的ID GROUP BY r.id );
额外小提示
如果有些ID在refs里没有对应记录,子查询会返回NULL,这时候可以用COALESCE把NULL转成0,避免字段值为空:
UPDATE aunames a SET aucount = COALESCE( (SELECT COUNT(r.rec) FROM refs r JOIN aunames_copy ac ON r.id = ac.id WHERE ac.id = a.id GROUP BY r.id), 0 );
内容的提问来源于stack exchange,提问作者Walter Schrabmair
相关产品推荐
相关产品推荐

