2011-03-11 20 views
17

से अद्यतन में से मैं वास्तव में ऐसा ही कुछ करने की ज़रूरत:ग्रुप खंड

UPDATE table t1 
SET column1=t2.column1 
FROM table t2 
INNER JOIN table t3 
USING (column2) 
GROUP BY t1.column2; 

लेकिन postgres कह रहा है मैं GROUP BY क्लॉज़ के बारे में सिंटेक्स त्रुटि है। ऐसा करने का एक अलग तरीका क्या है?

+0

मुझे लगता है कि आपको और अधिक स्पष्ट रूप से प्रदर्शित करने की आवश्यकता है जो आप चाहते हैं: "t1.column1" का जिक्र करते समय "t1.column2" द्वारा समूहित किया जा रहा है, या तो एक सादे क्वेरी में समझ में नहीं आता है। आप टी 2 और टी 1 में शामिल होने वाली किसी शर्त को भी निर्दिष्ट नहीं कर रहे हैं, जो वास्तव में समझ में नहीं आता है। – araqnid

+0

मुझे नहीं लगता कि यह कम से कम – shigeta

उत्तर

47

अद्यतन विवरण ग्रुप BY का समर्थन नहीं करता है, the documentation देखें। आप t1 को सौंपने से पहले t2/t3 से पंक्तियों के समूह के लिए की जरूरत है

UPDATE table t1 SET column1=t2.column1 
FROM table t2 
JOIN table t3 USING (column2) 
WHERE t1.column2=t2.column2; 

: आप t2 से संबंधित पंक्ति के साथ t1 अद्यतन करने के लिए कोशिश कर रहे हैं, तो आप इस तरह कहां खंड कुछ का उपयोग करना चाहें आप इस तरह एक सबक्वेरी कुछ उपयोग करने की आवश्यकता होगी: हालांकि के रूप में तैयार है कि क्योंकि t2.column1 बयान के आधार पर समूहित में शामिल नहीं है काम नहीं करेगा

UPDATE table t1 SET column1=sq.column1 
FROM (
    SELECT t2.column1, column2 
    FROM table t2 
    JOIN table t3 USING (column2) 
    GROUP BY column2 
    ) AS sq 
WHERE t1.column2=sq.column2; 

(यह एक समग्र समारोह होना चाहिए था एक साधारण कॉलम संदर्भ के बजाय)।

अन्यथा, आप यहां क्या करने की कोशिश कर रहे हैं?

+1

पर mysql के साथ किया जा सकता है मुझे समझ में नहीं आया कि वह क्या करने की कोशिश कर रहा था लेकिन यह प्रतिक्रिया अभी भी मेरे लिए काफी उपयोगी थी =) – Yobert

संबंधित मुद्दे