Actualizar muchas filas en una tabla desde otra tabla basándose en que una columna de cada una es igual (user_id).
Ambas tablas tienen una columna user_id
. Necesito insertar datos de t2
en t1
cuando la columna user_id
es igual.
Gracias de antemano por cualquier ayuda ofrecida.
update
table1 t1
set
(
t1.column1,
t1.column2
) = (
select
t2.column1,
t2.column2
from
table2 t2
where
t2.column1 = t1.column1
)
where exists (
select
null
from
table2 t2
where
t2.column1 = t1.column1
);
O esto (si t2.columna1 <=> t1.columna1 son muchos a uno y cualquiera de ellos es bueno):
update
table1 t1
set
(
t1.column1,
t1.column2
) = (
select
t2.column1,
t2.column2
from
table2 t2
where
t2.column1 = t1.column1
and
rownum = 1
)
where exists (
select
null
from
table2 t2
where
t2.column1 = t1.column1
);
Si desea actualizar las filas coincidentes en t1 con datos de t2 entonces:
update t1
set (c1, c2, c3) =
(select c1, c2, c3 from t2
where t2.user_id = t1.user_id)
where exists
(select * from t2
where t2.user_id = t1.user_id)
La parte "where exists" es para evitar que se actualicen las columnas de t1 a null cuando no exista ninguna coincidencia.
No es una inserción si el registro ya existe en t1 (el user_id coincide) a menos que esté dispuesto a crear user_id duplicados.
¿Es posible que desee una actualización?
UPDATE t1
SET <t1.col_list> = (SELECT <t2.col_list>
FROM t2
WHERE t2.user_id = t1.user_id)
WHERE EXISTS
(SELECT 1
FROM t2
WHERE t1.user_id = t2.user_id);
Espero que ayude...