通过合并更新

时间:2014-07-01 17:58:59

标签: sql oracle sql-update sql-merge

创建程序时遇到设计问题。

假设我必须使用同一行中其他列中的数据更新表中的所有行。假设table1有3列ABC,我需要将所有行更新为C=A+B。所以我可以使用:

update table1 set C=A+B;

但我需要使用以下内容来做到这一点:

merge tab1e1 using (some query) on (some condition)
when matched update
 C=A+B
when not matched 
null;

有没有办法通过操纵'some query'和'some condition'来做到这一点?

1 个答案:

答案 0 :(得分:1)

我真的不明白为什么您要使用合并而不是更新,但如果您真的需要,可以使用dual创建using子句和on条件始终为真:

merge into table1
using (select null from dual)
on (1 = 1)
when matched then update set c = a + b;

使用一些示例数据:

create table table1 (a number, b number, c number);
insert into table1 values (1, 2, null);
insert into table1 values (3, 4, null);
insert into table1 values (5, 6, null);

merge into table1
using (select null from dual)
on (1 = 1)
when matched then update set c = a + b;

3 rows merged.

select * from table1;

         A          B          C
---------- ---------- ----------
         1          2          3 
         3          4          7 
         5          6         11 

SQL Fiddle