2011-03-11 14 views
17

ho davvero bisogno di fare qualcosa di simile:GROUP BY in UPDATE FROM

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

Ma postgres sta dicendo che ho errore di sintassi sulla clausola GROUP BY. Qual è un modo diverso per farlo?

+0

Penso che sia necessario dimostrare più chiaramente cosa si vuole: fare riferimento a "t2.column1" quando si raggruppa per "t1.column2" non avrebbe senso in una semplice query. Inoltre, non stai specificando alcuna condizione che unisce t2 e t1, il che non ha molto senso. – araqnid

+0

non penso che si possa fare con mysql almeno – shigeta

risposta

47

L'istruzione UPDATE non supporta GROUP BY, vedere the documentation. Se stai cercando di aggiornare t1 con la riga corrispondente da T2, che ci si vuole utilizzare la clausola WHERE qualcosa di simile:

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

Se è necessario raggruppare le righe da t2/t3 prima di assegnare a T1 , avresti bisogno di usare un qualcosa di subquery come questo:

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; 

Anche se come formulato che non funziona perché t2.column1 non è incluso nel GROUP BY (che avrebbe dovuto essere una funzione di aggregazione piuttosto che un semplice riferimento di colonna).

Altrimenti, che cosa stai cercando di fare esattamente qui?

+1

Non ho capito cosa stava cercando di fare, ma questa risposta era ancora abbastanza utile per me =) – Yobert