2013-01-22 15 views
13

This bity robocze świetne:MYSQL aktualizacji przy użyciu sum() prowadzić na wielu stołach

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

który dodaje razem wszystkie grupy pól w kolumnie attributes_stock.

Mam problem z uzyskaniem tego wyniku, aby zaktualizować kolejną kolumnę w innej tabeli.

To jest to, co mam:

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 

Wszelkie porady mile widziana.

Odpowiedz

21

Nie można użyć group by wewnątrz instrukcji aktualizacji. Aby dokonać grupowania, musisz użyć podrzędnego wyboru.

coś takiego:

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

@windywah sprawdź moją aktualizację – Ray

+0

Jesteś ma n @Ray, pracował na poczęstunek !! Wielkie dzięki!!! – windywah

1

Spróbuj tego:

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 
7

Niektóre sprzyjają nowszych-stylem JOIN ... ON składnię operacji join, vs. operatora przecinek i dołączyć orzeczenie w WHERE klauzula:

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

... po prostu nie zapominaj o klauzuli "where", jeśli nie chcesz aktualizować każdego wiersza w tabeli. – SEoF

+0

Powinienem również dodać - składnia "JOIN ... ON" może faktycznie poprawić wydajność zapytań podczas dołączania do 3 lub więcej tabel. – SEoF

+1

Kolejną zaletą składni 'JOIN' jest to, że jeśli chcesz również aktualizować produkty (ustaw" ilość = 0 "), które nie mają w ogóle zasobów, możesz łatwo zmienić sprzężenie na' LEFT JOIN'. –

Powiązane problemy