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

使用单SELECT更新多行时触发多行返回错误,求问题排查

UPDATE语句触发“单SELECT返回多行”错误的原因与解决

错误根源很明确:你用来给IT.BCOST赋值的子查询,对于ITEMS表中的部分记录,在VENDOR表中匹配到了多条相同ITEMNO的记录,导致子查询返回多个结果。而SET子句要求赋值的子查询必须只能返回单个值,因此触发了这个报错。

解决方法分三种情况:

  • 若只需取匹配记录中的某类价格(如最高、最低、平均),用聚合函数限定返回单值:
    UPDATE ITEMS IT  
    SET IT.BCOST = (SELECT MAX(V.PRICE + (V.PRICE * 0.1)) -- 替换为MIN/AVG也可
                    FROM VENDOR V
                    WHERE V.ITEMNO = IT.ITEMNO)
    WHERE EXISTS (SELECT 1 FROM VENDOR V WHERE V.ITEMNO = IT.ITEMNO)
    
  • 若业务逻辑里VENDOR表同一个ITEMNO应该只有一条记录,先清理重复数据,或者给VENDOR表的ITEMNO字段添加唯一约束,从根源避免重复。
  • 若需要基于每个VENDOR的记录更新(需确认业务逻辑合理性),改用关联更新的写法:
    UPDATE ITEMS IT
    JOIN (
        SELECT ITEMNO, PRICE + (PRICE * 0.1) AS ADJUSTED_PRICE
        FROM VENDOR
        -- 若有重复,此处可添加聚合或过滤条件,比如取最新创建的记录
    ) V ON IT.ITEMNO = V.ITEMNO
    SET IT.BCOST = V.ADJUSTED_PRICE
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:45:06