使用派生的键值用另一个表中的数据更新一个表

时间:2018-07-22 01:07:04

标签: sql oracle

表1:

id    name    desc
------------------
1     a       abc
2     b       def
3     c       adf


Table 2:
name    desc
------------
x       123
y       345

如何运行一个SQL更新查询,该查询可以使用表1的ID和表2中的rownum用表2的名称和desc更新表1?可以假设table2中的rownum与表1的id相同。所以我得到的最终结果是

Table 1:

id    name    desc
------------------
1     x       123
2     y       345
3     c       adf

下面是用于表创建和记录插入的脚本

create table table1 (
  id number,
  name varchar2(10),
 desc_ varchar2(10)
);

create table table2 (
  name varchar2(10),
  desc_ varchar2(10)
);

insert into table1 values(1, 'a', 'abc');
insert into table1 values(2, 'b', 'def');
insert into table1 values(3, 'c', 'ghi');

insert into table2 values( 'x', '123');
insert into table2 values( 'y', '456');

归功于“ update one table with data from another

1 个答案:

答案 0 :(得分:0)

表中没有“ rownum”之类的东西。 SQL表表示无序集,因此没有排序列就没有排序。

Oracle确实提供rowid作为内置列标识符。这与rownum不同,并且不能保证顺序正确。

可以使用rownum,但是该值不能保证具有任何特定含义,并且可能在两次运行之间发生变化:

update table1
    set (name, desc) = (select name, desc
                        from (select t2.*, rownum as seqnum
                              from table2 
                             ) t2
                        where seqnum = table1.id
                       )
    where id <= (select count(*) from table2);