我需要将数据插入到已经包含一些数据的表中,现在将新列添加到表中,我们需要使用另一个表中的值插入/更新新列。
assert cfgvar == comp
现在我们需要将source_tab中的rsrc_nm列的值插入到target_tab的scvlan列中。
注意:我们在两个表之间没有任何关系,就像我们在示例中看到的那样,target_tab的行数少于source_tab,然后只有来自target_tab的行应该使用source_tab中的唯一值插入/更新。 我们可以从source_tab中获取任何值。
create table target_tab (fname varchar2(20), acc_no number);
insert into target_tab values('Anybody',121);
insert into target_tab values('Somebody',122);
insert into target_tab values('Nobody',123);
alter table target_tab add sc_vlan varchar2(20);
create table source_tab (rsrc_nm varchar2(20));
insert into source_tab values ('2839_124');
insert into source_tab values('2839_125');
insert into source_tab values('2839_126');
insert into source_tab values('2840_131');
insert into source_tab values('2841_132');
insert into source_tab values('2840_134');
insert into source_tab values('2840_127');
答案 0 :(得分:0)
我想你可以像这样使用merge
:
merge into target_tab t
using (
select s.rsrc_nm, t.rwd
from (select row_number() over (order by acc_no) rn, t.*, rowid rwd
from target_tab t) t
join (select row_number() over (order by rsrc_nm) rn, s.*
from source_tab s) s
on t.rn =s.rn
) s
on (t.rowid = s.rwd)
when matched then update set t.sc_vlan = s.rsrc_nm
对任何列的两个表中的数据进行排序,使用row_number
进行匹配并更新。