我在另一个表(如ac )中有大约 88k 条记录。我想将表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
您可以执行相关更新:
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 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
如果没有要更新的 matchign 行,该子句会阻止将值设置为 null。如果第四行ac
是012
而不是210
它们将在两个版本中全部更新。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句