SQL oracle如何将来自不同表的两列相乘,并将结果列放在其中一个表中



我目前正在一个SQL项目上工作,我的代码只是不会工作,这是我尝试的

UPDATE detail_order 
SET total = (
SELECT (detail_order.quantity*product.PRICE_EXCLVAT) 
FROM detail_order,product 
where detail_order.npro=product.npro
);

但是oracle一直告诉我:ora-01427单行子查询返回多于一行。但我不知道如何解决这个问题,因为每个产品都有一个价格,每个订单只与一个产品相关联,所以没有混淆。有些产品被订购了好几次,但我看不出这有什么问题。

应该是这样的:

update detail_order d set
d.total = (select d.quantity * p.price_exclvat
from product p
where p.npro = d.npro
)
where exists (select null from product a
where a.npro = d.npro
);

merge into detail_order d
using product p
on (p.npro = d.npro)
when matched then update set d.total = d.quantity * p.price_exclvat;

这些都不起作用(即,如果product表中有多个nprodetail_ordernpro匹配的行,您将再次获得too_many_rows

那该怎么办呢?这取决于你自己;我们没有你们的桌子,也不知道你们的要求是什么。

我相信你想要的是这样的:

update detail_order d
set total = quantity *
(select price_exclvat from product where npro = d.npro)
;

quantity是来自您正在更新的同一行的数量。没有理由引用detail_order来检索行的数量

相关内容

最新更新