简体   繁体   English

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

[英]How to update multiple columns in the same table with the same sub-query in Oracle SQL

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中。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM