parent nodes: SQLapuntes | UpdatesVariasTablas
¿Cómo poner un INNER JOIN dentro de un Update?
Tengo las tablas ORIGEN y DESTINO, ambas tienen un campo de nombre que para algunos registros es distinto y tengo que igualarlos, desde ORIGEN machacando el campo de DESTINO.
El select para ver los registros es este:
SELECT DESTINO.LEGALACTSNAME, ORIGEN.NOMBRE
FROM DESTINO
INNER JOIN ORIGEN
ON DESTINO.OPERATIONKEY = ORIGEN.OPERATIONKEYID
WHERE DESTINO.LEGALACTSNAME <> ORIGEN.NOMBRE
y no tengo ni idea de como hacer el UPDATE lo que intento me da error ¿se pueden poner INNER joins en el update? ¿Cómo sería la estructura?
Solución: (de Josep Martínez)
La manera correcta de fer-ho seria:
UPDATE DESTINO SET LEGALACTSNAME = ORIGEN.NOMBRE
FROM DESTINO D
INNER JOIN ORIGEN
ON D.OPERATIONKEY = ORIGEN.OPERATIONKEYID
WHERE D.LEGALACTSNAME <> ORIGEN.NOMBRE
Ho sé, és poc intuitiu. Gens intuitiu. Fins i tot liós.
Entenc que això ha estat una cosa punctual, que no ho poses dins del codi de l’aplicació… sinó, evita els cursors ;-)
Es decir: hay que declarar la tabla de destino dos veces, una para el UPDATE y la otra dentro del FROM