如何使用其他列的多个数据更新列?

时间:2018-04-06 07:36:05

标签: sql oracle oracle11g sql-update oracle10g

TEST1

t1  t2

1   

TEST2

x

1

2

3

upto 20

所以我希望所有x值都复制到t2 我该怎么办?

更详细:

  

有2个表' test1' ,' test2'。 ' test1'有两列,即'   t1' ,' t2'和' test2'有一列,即#39; x'。所以我需要   将test2.x列值复制到test1.t2列。 test1.t1 - 1,test1.t2    - null,test2.x - 1,2,3,4 ..... 20

1 个答案:

答案 0 :(得分:2)

问题文本不清楚,据我所知,你将test1表的t1列的值设为1,2,3 ... 20,如果你想从test2.x复制全部,那么你可以使用:

update test1 t1
   set t1.t2 = ( select t2.x
                   from test2 t2
                  where t2.x = t1.t1 );

但是,实际上不需要另一个表格(table2

update test1 t1 set t1.t2 = t1.t2;

关于上次修改,您需要merge声明:

merge into test1 a
  using test2 b
    on (nvl(a.t1,0) = nvl(b.x,0))
  when matched then
    update set a.t2 = nvl(b.x,0)
  when not matched then
    insert(t2)
    values(nvl(b.x,0));

然后你可以得到以下内容:

select * from test1 order by t2;

T1  T2
--  --------------------------------------------------
1   1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .
    .
    .
    20

demo