2017-10-06 55 views
1

对SQL和IT世界来说,这是一个新手,在寻求帮助之前总是做很多工作,但这次我很难过。Oracle SQL返回多个表的总和

我有三个表:

enter image description here

所以我想通过以下操作来更新“payment_owed”表: 对每一个客户,得到food_id和数量,然后使用food_id乘法数量由成本决定。

我已经做了这么远的自然连接在表上,并试图总结的数量最好*成本为每个ID

我更新特定客户的理解:

update customer 
set payment_owed = (select <quantity>) * (select <cost>) 
where cust_no = 1; 

如果即时通讯不在正确的论坛或有更好的地方来问这些问题让我知道,谢谢你的时间!

+1

您使用MS SQL Server或Oracle? (不要标记不涉及的产品。) – jarlh

+1

我删除了所有产品特定的标签。请添加您实际使用的那个。 –

+0

在旁注:你提到**自然连接**。我的建议:**永远不要使用它们!**一旦列被添加到表格中,它们就容易发生崩溃查询。我不知道为什么在标准中引入了自然连接。从一开始这是一个糟糕的主意。 –

回答

2

简单:

update customer 
set payment_owed = (SELECT SUM(o.cost*s.quantity) 
        FROM order o JOIN session s ON s.food_id = o.food_id   
        WHERE s.cust_no = customer.cust_no) 
where cust_no = 1; 

反正你会在表中的每个变化后更新呢?如何使用像这样的看法:

CREATE VIEW my_view AS 
SELECT cust_no, SUM(o.cost*s.quantity) 
FROM order o 
JOIN session s ON s.food_id = o.food_id 
GROUP BY cust_no; 
+1

一个视图很棒,或者是一个计算列! – jarlh

+1

我会从'WHERE s.cust_no = 1'更改为'WHERE s.cust_no = customer.cust_no',所以当主查询的where子句被更改或删除时它仍然有效。 –

+0

@ThorstenKettner是的,第一个编辑之前的版本也使用相关的子查询。我将更改为原始版本。 – lad2025