You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

correlated update报错‘single-row subquery returns more than one row’的修正方案

修正关联更新中的“单行子查询返回多行”错误

嘿,我来帮你搞定这个问题!你遇到的single-row subquery returns more than one row错误,根源在于你写的子查询没有和当前要更新的my_table行做一对一绑定——它直接把两个表全连接后返回所有匹配的a_value,数据库当然不知道该选哪个值给当前行啦。

下面给你两种靠谱的修正方案,都能达到你想要的效果:

方案1:带行级关联的子查询

这种写法让子查询只针对当前更新的my_table行,返回对应OrderID的单个a_value,同时用EXISTS确保只更新有匹配数据的行:

UPDATE my_table
SET my_value = (
    SELECT a_value 
    FROM result_table 
    WHERE result_table.OrderID = my_table.OrderID
)
WHERE EXISTS (
    SELECT 1 
    FROM result_table 
    WHERE result_table.OrderID = my_table.OrderID
);
  • 子查询里的result_table.OrderID = my_table.OrderID是关键,它会锁定当前行对应的匹配数据,保证每次只返回单行;
  • 如果你的需求允许没有匹配的行保持my_value为NULL,可以去掉后面的WHERE EXISTS部分。

方案2:使用UPDATE JOIN(更简洁高效)

如果你的数据库支持UPDATE JOIN(比如MySQL、PostgreSQL等),这种写法更直观,直接通过关联两个表完成批量更新:

UPDATE my_table
JOIN result_table ON my_table.OrderID = result_table.OrderID
SET my_table.my_value = result_table.a_value;

这种方式不需要子查询,直接通过JOIN建立两行的对应关系,一次性完成所有匹配行的更新,效率也更高。

不管用哪种方案,执行后你的my_table都会变成你期望的样子:

OrderID my_volume my_value

1 100 2000
2 50 3500

内容的提问来源于stack exchange,提问作者Matin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:09:29