使用SELECT语句更新列

时间:2018-09-09 01:03:20

标签: sql sql-server

我有一个表FactSales,其中包含以下列:

Revenue, Quantity, UnitCost

这是表格的样子:

UnitCost   | Revenue | Quantity
-----------+---------+----------
NULL       | 50.0    | 5
NULL       | 70.0    | 3

现在,我想将UnitCost中的数据更新为等于Revenue / Quantity的数据,无论何时使用以下查询

UPDATE FactSales 
SET UnitCost = (SELECT Revenue / Quantity
                FROM FactSales);

我收到以下错误:

  

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

应该如何编写update语句以成功更新值?

2 个答案:

答案 0 :(得分:10)

不要使用子查询,只需一个表达式就足够了。

UPDATE FactSales 
       SET UnitCost = Revenue / Quantity;

如果表有多行,则子查询将检索多行。但是在给定的上下文中,仅允许返回不超过一行的子查询。但是在您的查询中根本不需要子查询。

答案 1 :(得分:1)

您的查询分析

UPDATE FactSales 
SET UnitCost = (
SELECT Revenue / Quantity
FROM FactSales
);

在此子查询中,这里返回多个值,SQL抱怨,因为它不能为UnitCost分配多个值

(
    SELECT Revenue / Quantity
    FROM FactSales
    );


    output 
 Revenue / Quantity
    10 --1st row
    23.333333333333332 --2nd row

因此会抛出该错误

  

子查询返回了多个值。当   子查询遵循=,!=,<,<=,>,> =,或当子查询用作   表达式

使用子查询无效,只需在单个查询中进行,如下所示

UPDATE FactSales 
       SET UnitCost = Revenue / Quantity; --here for each row single value will return 

注意:当

  

子查询遵循=,!=,<,<=,>,> =,表示这种类型的运算符在sql引擎中不允许多个值。