3

子行の合計値を取得し、そのデータを親行で更新する必要があります。以下に示すようにこれを取得しましたが、エラー #1111 (グループ関数の無効な使用) が発生しました。

CREATE TEMPORARY TABLE cms_ladu_temp LIKE cms_ladu;

INSERT INTO cms_ladu_temp SELECT * FROM cms_ladu WHERE parent_id IN (326,500);

UPDATE 
    cms_ladu 
INNER JOIN
    cms_ladu_temp
ON
    cms_ladu_temp.parent_id=cms_ladu.id 
SET  
    cms_ladu.child_packaging_units_in=SUM(cms_ladu_temp.packaging_units_in), 
    cms_ladu.child_net_weight_in=SUM(cms_ladu_temp.net_weight_in) 
WHERE 
    cms_ladu.id IN (326,500);
4

2 に答える 2

2

あなたがする必要があるのは、ID でグループ化して、各親 ID の子合計を分離することです。これを行うには、副選択を使用する必要があります。

また、一時テーブルを作成する必要はありません。サブセレクトで集計をラップし(グループ化parent_id)、サブセレクトをメインテーブルに結合するだけです:

UPDATE 
    cms_ladu a
INNER JOIN
(
    SELECT   parent_id, 
             SUM(packaging_units_in) AS pui,
             SUM(net_weight_in) AS nwi
    FROM     cms_ladu
    WHERE    parent_id IN (326,500)
    GROUP BY parent_id
) b ON a.id = b.parent_id
SET 
    a.child_packaging_units_in = b.pui,
    a.child_net_weight_in = b.nwi
于 2012-07-19T07:15:54.260 に答える
2

試す

UPDATE  cms_ladu a
    INNER JOIN (SELECT parent_id, SUM(packaging_units_in) AS packaging_units_in, SUM(net_weight_in) AS net_weight_in FROM cms_ladu_temp WHERE id IN (326,500) GROUP BY parent_id) b
        ON b.parent_id=a.id
SET     a.child_packaging_units_in = b.packaging_units_in
    ,a.child_net_weight_in = b.net_weight_in
于 2012-07-19T07:16:27.487 に答える