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

SQL子查询更新语句报错:子查询返回多个值,求解决方案

问题解决:UPDATE子查询返回多行错误

错误原因

你的子查询没有与外层的tbl_item_history做行级关联,且如果tbl_stock_list中存在多个和同一IH_ITEMNO匹配的Stock_Code,子查询会返回多条结果,无法赋值给单个字段。

正确写法

场景1:一对一关联(每个IH_ITEMNO对应唯一Stock_ID)

使用JOIN关联更新,效率更高:

UPDATE ih
SET ih.Stock_ID = sl.Stock_ID
FROM tbl_item_history ih
JOIN tbl_stock_list sl ON ih.IH_ITEMNO = sl.Stock_Code

场景2:一对多关联(一个IH_ITEMNO对应多个Stock_ID)

需要指定取某一个值(如最大/最小),同时确保子查询仅返回当前行的匹配结果:

UPDATE tbl_item_history
SET Stock_ID = (
    SELECT MAX(sl.Stock_ID) -- 可替换为MIN,根据业务需求选择
    FROM tbl_stock_list sl
    WHERE tbl_item_history.IH_ITEMNO = sl.Stock_Code
)
-- 可选:仅更新有匹配记录的行,避免无匹配行被设为NULL
WHERE EXISTS (
    SELECT 1
    FROM tbl_stock_list sl
    WHERE tbl_item_history.IH_ITEMNO = sl.Stock_Code
)

说明

  • 关联更新写法适合一对一的匹配场景,直接通过JOIN定位到需要更新的行和对应的值。
  • 子查询写法通过外层WHERE条件绑定当前行,再用聚合函数保证返回单行结果;加上WHERE EXISTS可以避免无匹配的行被更新为NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:25:07