2011-05-25 6 views
1

のは、私は次のシナリオに一致するテーブルのセットを持っていると言いましょう:のOracle SQL:子テーブル内の値の合計に基づいてレコードを更新する必要性のヘルプ

クレートは ボックスが バケットが数値を保持バケツを持っている箱を持っています値 ボックスには、その中のすべてのボックスにあるすべてのバケットの全部の合計であるTotalPiecesという数値が格納されます。

したがって、私はCRATES、BOXES、BUCKETSと呼ばれる以下のテーブルを持っています。私は、すべてのバケツ片の合計になるように、クレート表のすべてのクレートのTotalPieces列(以下のSQLには表示されていません)を入力する更新文が必要です。はい、誰かが「まあ、なぜ選択文を実行するのではなく、そのようにしているのですか」と決めた場合の特定の理由で、このようにしなければなりません。私は、SELECT文を行うことができますし、それは次のようになります。私は木箱テーブルの断片列にすべてのバケットの合計の部分を取得するにはどうすればよい

SELECT CR.ID, SUM(BU.PIECES) FROM CRATES CR 
JOIN BOXES BO ON BO.CRATE_ID = CR.ID 
JOIN BUCKETS BU ON POPR.BO_ID = BO.ID 
GROUP BY CR.ID; 

SELECT BO.CRATE_ID AS CRATEID, SUM(BUCKETSUM) AS CRATESUM 
    FROM BOXES BO INNER JOIN 
    (SELECT BU.BO_ID AS BOXID, SUM(BU.PIECES) as BUCKETSUM 
    FROM BUCKETS BU GROUP BY BU.BO_ID) BU 
    ON BU.BOXID = BO.ID 
    GROUP BY BO.CRATE_ID 

答えて

-1

これを試してみてください

update crates cr set cr.total_pieces = 
(
    select sum(bu.pieces) pieces from crates cr 
    join boxes bo on bo.crate_id = cr.id 
    join buckets bu on bu.box_id = box.id 
    where crate.id = cr.id 
    group by crate.id 
); 
+1

これは私に選択のように見えます。私は更新声明が必要です。 – oscilatingcretin

+0

更新ステートメントを選択することはできません。ストアドプロシージャを記述したり、スクリプトを作成したり、2つのクエリを実行する必要があります。 –

関連する問題