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

SQL跨表插入报错:子查询返回多行的解决方案咨询

解决子查询返回多行的INSERT语句优化问题

你的问题根源在于嵌套的子查询没有和主查询的行建立关联,导致它每次都会返回所有符合WHERE条件的行,这就触发了“subquery has more than one value”的报错。而且根据你补充的业务规则(每个R2IGTNo只会对应三个重量列中的一个非空值),我们完全不需要用子查询,直接在主查询里处理拼接逻辑即可。

修改后的查询语句

INSERT INTO dbo.tblCrucibleLdgDtls (R2IGTNo, TotalMtrlWgt)
SELECT 
    R2IGTNo,
    RTRIM(LTRIM(CONCAT(ULTotalS1S2MtrlWgt, ULTotalS3S4MtrlWgt, ULTotalS5S6MtrlWgt))) AS TotalMtrlWgt
FROM dbo.tbl1RMWeighingDetails 
WHERE 
    R2IGTNo LIKE '%C%'
    AND (ULTotalS1S2MtrlWgt IS NOT NULL OR ULTotalS3S4MtrlWgt IS NOT NULL OR ULTotalS5S6MtrlWgt IS NOT NULL)

为什么这样改?

  1. 去掉冗余子查询:直接在主查询的SELECT列表里完成拼接,避免了子查询返回多行的问题。
  2. 贴合业务规则:根据你说的R2IGTNo和重量列的对应关系,每个行只会有一个重量列有值,CONCAT函数会自动忽略NULL值(将其视为空字符串),所以拼接结果正好是你需要的单个有效重量值。
  3. 保留过滤条件:把原查询子查询里的非空判断移到主查询的WHERE子句中,确保只处理有有效重量值的行。

这样修改后,既保证了每行都能获取到对应的唯一TotalMtrlWgt值,又不会出现子查询返回多行的报错,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:02:51