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

如何基于SELECT查询结果逐行更新Sales_Data表的Revenue列?

解决UPDATE语句中子查询返回多行的问题

问题原因

你当前的UPDATE语句里,SET后的子查询返回了全部56046行的Revenue计算结果,但SQL要求这个位置的子查询必须仅返回单个值(对应要更新的当前行),因此触发了报错。

正确写法1:使用UPDATE JOIN(推荐)

直接通过JOIN关联两张表,一次性完成更新,效率更高:

UPDATE Sales_Data
SET Revenue = Sales_Data.OrderQuantity * Product_Lookup.ProductPrice
FROM Sales_Data
INNER JOIN Product_Lookup 
    ON Product_Lookup.ProductKey = Sales_Data.ProductKey

正确写法2:使用关联子查询

如果一定要用子查询,需要让子查询与外层的Sales_Data行绑定,确保每次只返回当前行的计算值:

UPDATE Sales_Data
SET Revenue = (
    SELECT sd.OrderQuantity * pl.ProductPrice
    FROM Product_Lookup pl
    WHERE pl.ProductKey = Sales_Data.ProductKey
)

这种写法里,子查询通过pl.ProductKey = Sales_Data.ProductKey和外层要更新的行关联,每次仅返回当前行对应的Revenue值,不会出现多行结果的问题。

补充说明

  • 两种写法都会把匹配到Product_Lookup的Sales_Data行的Revenue列更新为计算值;
  • 如果Sales_Data中存在ProductKey在Product_Lookup里无匹配的行,写法2会将这些行的Revenue设为NULL,写法1则不会修改这些行(因为INNER JOIN仅保留匹配的行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:55:54