更新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
相关产品推荐
相关产品推荐

