Solución:
Postgres permite:
UPDATE dummy
SET customer=subquery.customer,
address=subquery.address,
partn=subquery.partn
FROM (SELECT address_id, customer, address, partn
FROM /* big hairy SQL */ ...) AS subquery
WHERE dummy.address_id=subquery.address_id;
Esta sintaxis no es SQL estándar, pero es mucho más conveniente para este tipo de consulta que SQL estándar. Creo que Oracle (al menos) acepta algo similar.
Estás tras el UPDATE FROM
sintaxis.
UPDATE
table T1
SET
column1 = T2.column1
FROM
table T2
INNER JOIN table T3 USING (column2)
WHERE
T1.column2 = T2.column2;
Referencias
- Ejemplo de código aquí: GROUP BY en la cláusula UPDATE FROM
- Y aquí
- Especificación de sintaxis formal
Si no hay mejoras en el rendimiento al usar una combinación, prefiero las expresiones de tabla comunes (CTE) para mejorar la legibilidad:
WITH subquery AS (
SELECT address_id, customer, address, partn
FROM /* big hairy SQL */ ...
)
UPDATE dummy
SET customer = subquery.customer,
address = subquery.address,
partn = subquery.partn
FROM subquery
WHERE dummy.address_id = subquery.address_id;
En mi humilde opinión, un poco más moderno.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)