2017-10-06 13 views
1

SQLとIT世界に新たに追加されたFallowは、常にヘルプを求める前に多くの作業を行いますが、今回は私が困惑しています。その後、乗算food_idを使用して、food_idと量を、各顧客について 取得:だから私は、次の手順を実行して、「payment_owed」テーブルを更新しようとしています複数のテーブルにわたる複数のOracle SQLの戻り合計

enter image description here

は、私は3つのテーブルを持っていますその数量をコストで割る。

私はこれまでのところ行われてきた最高のは、特定の顧客を更新するため、各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

関連する問題