2011-03-11 10 views
17

realmente necesito hacer algo así:GROUP BY en ACTUALIZACIÓN DE cláusula

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

Pero postgres está diciendo que tengo error de sintaxis acerca cláusula GROUP BY. ¿Cuál es una forma diferente de hacer esto?

+0

Creo que necesita demostrar más claramente lo que quiere: hacer referencia a "t2.column1" cuando se agrupa por "t1.column2" tampoco tendría sentido en una consulta simple. Tampoco está especificando ninguna condición que se una a t2 y t1, lo que realmente no tiene sentido. – araqnid

+0

No creo que se pueda hacer con mysql al menos – shigeta

Respuesta

47

La instrucción UPDATE no es compatible con GROUP BY, ver the documentation. Si usted está tratando de actualizar t1 con la fila correspondiente de t2, que te gustaría utilizar la cláusula WHERE algo como esto:

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

Si necesita agrupar las filas de T2/T3 antes de asignar a t1 , que había necesidad de utilizar una subconsulta algo como esto:

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; 

Aunque como formulado que no funcionará porque t2.column1 no está incluido en la instrucción GROUP BY (que tendría que ser una función de agregado en lugar de una simple referencia de columna).

De lo contrario, ¿qué estás tratando de hacer exactamente aquí?

+1

No entendí lo que estaba tratando de hacer tampoco, pero esta respuesta fue bastante útil para mí =) – Yobert