2017-10-06 50 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