将数据从一个表插入到单个列中的另一个表没有关系

时间:2017-04-28 12:37:37

标签: sql oracle plsql oracle11g

我需要将数据插入到已经包含一些数据的表中,现在将新列添加到表中,我们需要使用另一个表中的值插入/更新新列。

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');

1 个答案:

答案 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进行匹配并更新。