2013-01-22 4 views
13

このビットを引き起こします。MYSQL更新使用して合計()複数のテーブル間で偉大な作業

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

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 

何かアドバイスは大歓迎:

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

答えて

21

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

何か:

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 
+0

@windywah更新をチェックアウト – Ray

+0

あなたはmaですn @レイ、治療を受けた!!どうもありがとう!!! – windywah

1

はこれを試してみてください句:

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

一部が結合操作の新しいスタイルJOIN ... ON構文を好む、対WHEREでカンマ演算子と結合述語:

​​
+0

...テーブルのすべての行を更新したくない場合は、 "where"句を忘れないでください。 – SEoF

+0

また、 "JOIN ... ON"構文は、3つ以上のテーブルを結合するときに実際にクエリのパフォーマンスを向上させることができます。 – SEoF

+1

'JOIN'構文のもう1つの利点は、在庫が全くない製品(' quantity = 0'を設定)を更新したい場合、簡単に結合をLEFT JOINに変更できることです。 –

関連する問題