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

更新SalesForm表Pictures列(关联表计数)遇子查询报错求助

问题解决:更新表列时子查询返回多个值的错误

错误原因

你原语句中的子查询未与外层SalesForm表关联,执行后会返回所有WorkOrderId对应的照片计数(多行结果),但SET Pictures要求右侧表达式必须返回单个值(对应当前更新行的计数),因此触发了"Subquery returned more than 1 value"的错误。

解决方案

方案1:关联子查询(简洁写法)

直接在子查询中通过WHERE关联当前行的Id,确保每个子查询仅返回当前行对应的照片数量:

UPDATE [dbo].[SalesForm]
SET Pictures = (
    SELECT COUNT(*)
    FROM dbo.storeImages b
    WHERE b.WorkOrderId = [dbo].[SalesForm].Id
)

如果需要将无照片的记录Pictures设为0(默认无匹配时子查询返回NULL),用ISNULL处理:

UPDATE [dbo].[SalesForm]
SET Pictures = ISNULL(
    (SELECT COUNT(*)
     FROM dbo.storeImages b
     WHERE b.WorkOrderId = [dbo].[SalesForm].Id),
    0
)

方案2:先统计再关联更新(适合大数据量)

先预统计所有WorkOrderId的照片数量,再通过LEFT JOIN关联更新,性能更优:

UPDATE sf
SET sf.Pictures = ISNULL(imgCount.Counts, 0)
FROM [dbo].[SalesForm] sf
LEFT JOIN (
    -- 预统计每个工单的照片数
    SELECT WorkOrderId, COUNT(*) AS Counts
    FROM dbo.storeImages
    GROUP BY WorkOrderId
) imgCount ON sf.Id = imgCount.WorkOrderId

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:42:47