Oracle SQL: нужна помощь в обновлении записи на основе суммы значений в дочерних таблицах - PullRequest
1 голос
/ 25 мая 2011

Допустим, у меня есть набор таблиц, которые соответствуют следующему сценарию:

Ящики имеют коробки Коробки имеют ведра В ведрах содержится числовое значение, которое называется 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;

Как получить общее количество кусков всех ведер в столбце кусков в таблице ящиков?

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Это делает трюк:

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
);
0 голосов
/ 25 мая 2011

Попробуйте это:

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...