如何更新另一个表中的记录

时间:2018-03-01 10:28:07

标签: sql oracle

我在另一张表中有大约88,000条记录,例如 ac 。我想将表 ac 的一列更新为主表,如 tbl 。 例如 - 表 tbl 样本记录,如

col1 col2 col3 col4

abc  dhj  123  ab12
def  bhv  456  ds34
ghi  hwj  789  hj46
jkl  yuh  012  ke28

ac 样本记录,如

col1 col3 `

cba   123
fed   456
ihg   789
lkj   012

如何更新 ac 表中的 tbl 值。所以记录看起来像

col1 col2 col3 col4

cba  dhj  123  ab12
fed  bhv  456  ds34
ihg  hwj  789  hj46
lkj  yuh  012  ke28

1 个答案:

答案 0 :(得分:2)

您可以执行correlated update

update tbl
set col1 = (select col1 from ac where ac.col3 = tbl.col3)
where exists (select col1 from ac where ac.col3 = tbl.col3);

3 rows updated.

select * from tbl;

COL1 COL2 COL3 COL4
---- ---- ---- ----
cba  dhj  123  ab12
fed  bhv  456  ds34
ihg  hwj  789  hj46
jkl  yuh  012  ke28

merge

merge into tbl
using ac
on (ac.col3 = tbl.col3)
when matched then update set tbl.col1 = ac.col1;

3 rows merged.

select * from tbl;

COL1 COL2 COL3 COL4
---- ---- ---- ----
cba  dhj  123  ab12
fed  bhv  456  ds34
ihg  hwj  789  hj46
jkl  yuh  012  ke28

在这两种情况下,第四行不受影响,因为ac中没有匹配的记录,正如@Littlefoot指出的那样。 merge找不到匹配项;对于update版本,如果没有要更新的匹配行,则where exists子句会阻止将值设置为null。如果ac中的第四行是012而不是210,则两个版本都会更新它们。