Обновление MYSQL с использованием результата sum() для нескольких таблиц


Эти биты отлично работают:

 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

Любые советы очень ценятся.

Author: DMK, 2013-01-23

3 answers

Вы не можете использовать group by внутри инструкции update. Вам нужно будет использовать дополнительный выбор, чтобы выполнить группировку.

Что-то вроде этого:

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
 25
Author: Ray, 2013-01-22 23:43:46

Некоторые предпочитают синтаксис более нового стиля JOIN ... ON для операции соединения по сравнению с оператором запятой и предикатом соединения в предложении 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
Author: spencer7593, 2013-01-23 00:12:35

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

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
Author: Barranka, 2013-01-22 23:46:52