2011-01-27 12 views

Respuesta

19

En una de varias tablas UPDATE, cada fila de la tabla de destino se actualiza sólo una vez, incluso que se devuelve más de una vez por la unión.

Desde el docs:

Cuando una cláusula FROM está presente, lo que esencialmente sucede es que la tabla de destino se une a las tablas mencionadas en el fromlist, y cada fila de salida de la unión representa una operación de actualización para la mesa objetivo Al usar FROM, debe asegurarse de que la unión produzca como máximo una fila de salida por cada fila que se va a modificar. En otras palabras, una fila de destino no debe unirse a más de una fila de la (s) otra (s) tabla (s). Si lo hace, solo una de las filas de unión se usará para actualizar la fila de destino, pero la que se utilizará no es fácilmente predecible.

Use este lugar:

UPDATE user u 
SET  balance = balance + p.amount 
FROM (
     SELECT user_id, SUM(amount) AS amount 
     FROM payment 
     WHERE id IN (36, 38, 40) 
     GROUP BY 
       user_id 
     ) p 
WHERE u.id = p.user_id 
+0

'p 'no está definido. –

+4

no - p es el alias de la subselección, está perfectamente definido. – Rob

Cuestiones relacionadas