我有一个表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语句以成功更新值?
答案 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引擎中不允许多个值。