如何使用Oracle SQL中的相同子查询更新同一表中的多个列

时间:2021-03-23 23:11:10

Is there a better way of writing this general type update in Oracle:

是否有更好的方法在Oracle中编写此常规类型更新:

UPDATE table1
SET c1 = ( SELECT d1 FROM table2 WHERE table1.id = table2.id ),
c2 = ( SELECT d2 FROM table2 WHERE table1.id = table2.id )

The update above is only an example. The sub-select could be much more complex.

上面的更新只是一个例子。子选择可能要复杂得多。

I see other SQL dialects have UPDATE ... SET ... FROM, but this does not seem to be in Oracle.

我看到其他SQL方言有UPDATE ... SET ... FROM,但这似乎不在Oracle中。

1 个解决方案

#1


You can update multiple columns in one go:

您可以一次更新多个列:

drop table t1;
drop table t2;

create table t1 (col1 number, col2 number, col3 number);

create table t2 (col1 number, col2 number, col3 number);

insert into t1 values (1, 10, 100);
insert into t1 values (2, 20, 200);

insert into t2 values (1, 100, 1000);
insert into t2 values (2, 200, 2000);

commit;

update t1
set (col2, col3) = (select col2, col3 from t2 where t2.col1 = t1.col1);

commit;

select * from t1;

      COL1       COL2       COL3
---------- ---------- ----------
         1        100       1000
         2        200       2000

#1


You can update multiple columns in one go:

您可以一次更新多个列:

drop table t1;
drop table t2;

create table t1 (col1 number, col2 number, col3 number);

create table t2 (col1 number, col2 number, col3 number);

insert into t1 values (1, 10, 100);
insert into t1 values (2, 20, 200);

insert into t2 values (1, 100, 1000);
insert into t2 values (2, 200, 2000);

commit;

update t1
set (col2, col3) = (select col2, col3 from t2 where t2.col1 = t1.col1);

commit;

select * from t1;

      COL1       COL2       COL3
---------- ---------- ----------
         1        100       1000
         2        200       2000