问题描述
||
假设我有一组符合以下情况的表:
板条箱有箱子
箱子有桶
值区包含一个称为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