晚安Stackoverflow团队/成员
Oracle版本:11g版本11.1.0.6.0 - 64位生产
我有两个表:ORDERS和ITEMS。
ORDERS看起来像这样
ITEMS看起来像这样
表ORDERS有1个或多个Order_Number,每个Order_Number分配给至少一个或更多个库。 Total_Value列应该准确存储与订单号关联的商品值的总和。表ITEMS实际上通过parcel_code项目存储特定order_number / s的值。
我的数据库有一个错误,对于订单号分配多个库的订单(例如订单号1和4)没有正确存储实际总价值。
在我的情况下,我无法找出UPDATE语句,该语句将选择从表ITEMS获取总和并通过parcel_code链接它的订单号并更新表ORDERS中的列total_value。
我的更新结果应该回复:
对于表格订单我应该回来
订单号1: 对于两行总值1120
订单号4 对于两行总值:350
订单编号2和3,因为它们是单仓库订单保持不变: 50和20
伪代码:
更新ORDERS set total_value =(从ITEMS I,ORDERS O中选择sum(I.item_value),其中O.parcel_code = I.parcel_code)
我还会更新那些已分配的电子仓库的订单,因为它们将完全相同。
我正在查看MERGE语句或INNER选择查询。我面临的问题是我的更新必须是动态的。这意味着不是由值驱动,而是由列连接驱动,因为我可能必须创建一个每天更新它的进程。
有人可以帮助我吗?
答案 0 :(得分:0)
您需要将项目和订单表连接在一起,然后选择所有item_values的总和,其中order_number等于您要更新的行(在表o1中)。
update
Orders o1
set o1.total_value = (
select sum(i.item_value) from Items i
join Orders o2 on o2.parcel_code = i.parcel_code
where o2.Order_number = o1.Order_number
)