0

我在更新我的一个表中的列时遇到问题。我有一个名为 ORDERS 的表,我在表中添加了一个新列,表示订单的总成本。我通过使用计算成本的查询来获得总成本。现在我正在尝试使用该选择查询来使用更新来填充表中的该列。这就是我所拥有的:

update ORDERS
set TOTAL_COST = (
select sum((p.COST*i.QUANTITY)*(1-o.DISCOUNT))+delivery(o.DELIVERY) as TOTAL_COST
from PRODUCT p, ITEM i, ORDERS o
where p.ID_PRODUCT = i.ID_PRODUCT and i.ID_ORDER = o.ID_ORDER
group by o.ID_ORDER, o.DISCOUNT, o.DATE, o.DELIVERY);

我的查询返回每个订单的总成本,这就是我想要在我的表中拥有的。我收到“单行子查询返回多行”错误。我不知道我做错了什么,有什么建议吗?

4

1 回答 1

2

为了使您的 UPDATE 工作,子查询 (SELECT SUM...) 需要为每个订单返回一行。但是根据错误消息,它肯定返回不止一行。

主要问题当然是没有谓词将要更新的当前行与子查询相关联。所以你至少需要在子查询中添加这样的东西:

o.ID_ORDER = ORDERS.ID_ORDER

此外,GROUP BY 子句往往会为 UPDATE 生成不止一行。它只需要减少到 o.ID_ORDER。

第三个问题是交付成本,它应该相加但在最后加上。所以他们必须被移出子查询:

update ORDERS
set TOTAL_COST = (
  select sum((p.COST*i.QUANTITY)*(1-o.DISCOUNT)) as TOTAL_COST
  from PRODUCT p, ITEM i, ORDERS o
  where o.ID_ORDER = ORDERS.ID_ORDER and p.ID_PRODUCT = i.ID_PRODUCT and i.ID_ORDER = o.ID_ORDER
  group by o.ID_ORDER
) + delivery(DELIVERY);
于 2012-12-04T06:50:04.293 回答