web-dev-qa-db-ja.com

複数のテーブルにわたるsum()結果を使用したMYSQL更新

このビットはうまく機能しています:

 SELECT products_id, sum(attributes_stock) 
 FROM products_attributes 
 GROUP BY products_id

これにより、attributes_stock列のフィールドのすべてのグループが合計されます。

私が問題を抱えているのは、この結果を取得して別のテーブルの別の列を更新することです。

これは私が持っているものです:

 UPDATE products, products_attributes 
 SET products.products_quantity = sum(products_attributes.attributes_stock) GROUP BY products_attributes.products_id 
 WHERE products.products_id = products_attributes.products_id

どんなアドバイスも大歓迎です。

15
windywah

更新ステートメント内でgroup byを使用することはできません。グループ化を行うには、サブ選択を使用する必要があります。

このようなもの:

UPDATE products p,( SELECT products_id, sum(attributes_stock)  as mysum
                   FROM products_attributes GROUP BY products_id) as s

   SET p.products_quantity = s.mysum
  WHERE p.products_id = s.products_id
26
Ray

新しいスタイルを好む人もいますJOIN ... ONsyntaxの結合操作と、WHERE句のコンマ演算子および結合述語の比較:

UPDATE products p
  JOIN ( SELECT q.products_id
              , SUM(q.attributes_stock) AS sum_attr
           FROM products_attributes q
          GROUP BY q.products_id
       ) r
    ON r.products_id = p.products_id
   SET p.products_quantity = r.sum_attr
7
spencer7593

これを試して:

update 
    products, 
    (select 
        products_id, sum(attributes_stock) as sumAttr
     from products_attributes
     group by products_id) as a
set
    products.products_cuantity = a.sumAttr
where
    products.products_id = a.products_id
1
Barranka