Actualizar una tabla con datos de otra tabla
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 ejecuto una consulta de actualización de SQL que pueda actualizar la Tabla 1 con la Tabla 2 name
y desc
usar la misma id
? Entonces el resultado final que obtendría es
Tabla 1:
id name desc
-----------------------
1 x 123
2 y 345
3 c adf
La pregunta se tomó de actualizar una tabla con datos de otra , pero específicamente para Oracle SQL.
Esto se llama 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 )
Suponiendo que la unión dé como resultado 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
Prueba esto:
MERGE INTO table1 t1
USING
(
-- For more complicated queries you can use WITH clause here
SELECT * FROM table2
)t2
ON(t1.id = t2.id)
WHEN MATCHED THEN UPDATE SET
t1.name = t2.name,
t1.desc = t2.desc;
intentar
UPDATE Table1 T1 SET
T1.name = (SELECT T2.name FROM Table2 T2 WHERE T2.id = T1.id),
T1.desc = (SELECT T2.desc FROM Table2 T2 WHERE T2.id = T1.id)
WHERE T1.id IN (SELECT T2.id FROM Table2 T2 WHERE T2.id = T1.id);
Update table set column = (select...)
nunca funcionó para mí ya que set solo espera 1 valor - Error de SQL: ORA-01427: la subconsulta de una sola fila devuelve más de una fila.
aquí está la solución:
BEGIN
For i in (select id, name, desc from table1)
LOOP
Update table2 set name = i.name, desc = i.desc where id = i.id;
END LOOP;
END;
Así es exactamente como se ejecuta en la hoja de trabajo de SQLDeveloper. Dicen que es lento pero esa es la única solución que me funcionó en este caso.