Oracle SQL:需要帮助,基于子表中的值之和更新记录

问题描述

|| 假设我有一组符合以下情况的表: 板条箱有箱子 箱子有桶 值区包含一个称为Pieces的数值 一个箱子里有一个叫做TotalPieces的数值,它是其中所有盒子中所有桶中所有碎片的总和。 因此,我有以下表格称为CRATES,BoxES,BUCKETS。我需要一个更新语句,该语句将填充板条表中所有板条的TotalPieces列(在下面的sql中未显示),作为所有存储段的总和。是的,我必须出于某种特定原因这样做,以防万一有人决定都像是这样,“好吧,为什么这样做而不是仅仅运行一条选择语句?\”我可以执行选择语句,然后它看起来像这样:
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;
如何将所有存储桶的总件数放入板条箱表的“件数”列中?     

解决方法

这可以解决问题:
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
);
    ,尝试这个:
 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