2013-01-22 45 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 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

@ विंद्यवा मेरा अपडेट देखें – Ray

+0

आप माँ हैं एन @ रे, एक इलाज किया !! बहुत धन्यवाद!!! – windywah

1

इस प्रयास करें:

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

कुछ नए शैली एक में शामिल होने के ऑपरेशन के लिए JOIN ... ON वाक्य रचना, बनाम अल्पविराम ऑपरेटर पक्ष और कहां में विधेय में शामिल होने के खंड:

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

... यदि आप तालिका में प्रत्येक पंक्ति को अपडेट नहीं करना चाहते हैं तो बस "कहां" खंड को न भूलें। – SEoF

+0

मुझे यह भी जोड़ना चाहिए - "जॉइन ... चालू" वाक्यविन्यास वास्तव में 3 या अधिक तालिकाओं में शामिल होने पर प्रश्नों के प्रदर्शन में सुधार कर सकता है। – SEoF

+1

'जॉइन' सिंटैक्स का एक अन्य लाभ यह है कि यदि आप उत्पादों को अपडेट करना चाहते हैं (सेट 'मात्रा = 0') जिसमें कोई स्टॉक नहीं है, तो आप आसानी से' बाएं जॉइन 'में शामिल हो सकते हैं। –