Tabla 1:
id name desc
-----------------------
1 a abc
2 b def
3 c adf
Tabla 2:
id name desc
-----------------------
1 x 123
2 y 345
En oracle SQL, ¿cómo puedo ejecutar una consulta sql update que pueda actualizar la Tabla 1 con el nombre
y desc
de la Tabla 2 utilizando el mismo id
? Así que el resultado final que obtendría es
Tabla 1:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
La pregunta está tomada de https://stackoverflow.com/questions/5036918/sql-update-query-with-data-from-another-table, pero específicamente para oracle SQL.
Esto se llama una actualización correlacionada
UPDATE table1 t1
SET (name, desc) = (SELECT t2.name, t2.desc
FROM table2 t2
WHERE t1.id = t2.id)
WHERE EXISTS (
SELECT 1
FROM table2 t2
WHERE t1.id = t2.id )
Asumiendo que la unión resulta en una vista con clave preservada, también podría
UPDATE (SELECT t1.id,
t1.name name1,
t1.desc desc1,
t2.name name2,
t2.desc desc2
FROM table1 t1,
table2 t2
WHERE t1.id = t2.id)
SET name1 = name2,
desc1 = desc2
Aquí parece haber una respuesta aún mejor con la cláusula 'in' que permite múltiples claves para la unión:
update fp_active set STATE='E',
LAST_DATE_MAJ = sysdate where (client,code) in (select (client,code) from fp_detail
where valid = 1) ...
El ejemplo completo está aquí: http://forums.devshed.com/oracle-development-96/how-to-update-from-two-tables-195893.html
El problema está en tener las columnas que quieres usar como clave entre paréntesis en la cláusula where antes de 'in' y tener la sentencia select con los mismos nombres de columnas entre paréntesis. where (columna1,columna2) in ( select (columna1,columna2) from table where "el conjunto que quiero" );