parent nodes: SQLapuntes | UpdatesVariasTablas

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