Обновление 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
Любые советы очень ценятся.
14
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