Обновление строк в одной таблице с данными из другой таблицы на основе одного столбца, в каждом из которых равны
Обновите много строк в одну таблицу из другой таблицы, основываясь на том, что каждый столбец равен (user_id).
обе таблицы имеют столбец user_id
. Необходимо вставить данные из t2
в t1
, когда столбец user_id
равен.
Заранее благодарим за предоставленную помощь.
Ответы
Ответ 1
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
);
Или это (если t2.column1 <= > t1.column1 много к одному, и любой из них хорош):
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
);
Ответ 2
Если вы хотите обновить соответствующие строки в t1 с данными из t2, то:
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)
Часть "где существует", чтобы предотвратить обновление столбцов t1 до нуля, если совпадение не существует.
Ответ 3
merge into t2 t2
using (select * from t1) t1
on (t2.user_id = t1.user_id)
when matched then update
set
t2.c1 = t1.c1
, t2.c2 = t1.c2
Ответ 4
Это не вставка, если запись уже существует в t1 (совпадение user_id), если вы не хотите создавать дубликаты user_id.
Возможно, вам потребуется обновление?
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);
Надеюсь, что это поможет...
Ответ 5
Вы всегда можете использовать и оставить "когда не согласованный раздел"
merge into table1 FromTable
using table2 ToTable
on ( FromTable.field1 = ToTable.field1
and FromTable.field2 =ToTable.field2)
when Matched then
update set
ToTable.fieldr = FromTable.fieldx,
ToTable.fields = FromTable.fieldy,
ToTable.fieldt = FromTable.fieldz)
when not matched then
insert (ToTable.field1,
ToTable.field2,
ToTable.fieldr,
ToTable.fields,
ToTable.fieldt)
values (FromTable.field1,
FromTable.field2,
FromTable.fieldx,
FromTable.fieldy,
FromTable.fieldz);