2011-05-25 50 views
1

讓我們說,我有一組符合以下情形的表的更新記錄:的Oracle SQL:需要幫助基於值的子表的總和

包裝箱具有箱 框有水桶 水桶持有數字值爲Pieces 一個箱子包含一個名爲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; 

如何將所有存儲桶中的所有存儲塊放入包裝箱表中的塊列中?

回答

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

試試這個:

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

這看起來像一個選擇了我。我需要更新聲明。 – oscilatingcretin 2011-05-25 16:26:23

+0

您不能選擇更新語句。您必須編寫存儲過程,編寫腳本或執行兩個查詢。 – 2011-05-25 16:41:08