正文:
需实现:将A表的某个字段的值复制到B表中
我们一般会这样写:UPDATE B SET B.NAME = (SELECT A.NAME FROM A WHERE A.NO = B.NO)
出现的问题是:
1,B表中A.NO = B.NO匹配不上的数据行,NAME字段会被清空;
例:A表{[NO1,NAME_A_1]},B表{[NO1,NAME_B_1], [NO2,NAME_B_2]},执行该语句后,B表数据会变成{[NO1,NAME_A_1], [NO2,null]}
2,效率较低,执行时间很长
解决方案:
1,加限制条件,更新的列只能是匹配得上的
UPDATE B SET B.NAME = (SELECT A.NAME FROM A WHERE A.NO = B.NO) WHERE B.NO IN (SELECT A.NO FROM A)
2,merge into
--注意顺序 MERGE IN TO B USING A ON (A.NO = B.NO) WHEN MATCHED THEN UPDATE SET B.NAME = A.NAME
参考博客:
1,oracle数据库大批量update操作记录 - shenxian1021的专栏 - 优快云博客
https://blog.youkuaiyun.com/shenxian1021/article/details/79269042
2,Oracle中的 UPDATE FROM 解决方法 - 穿林度水 - 博客园
https://www.cnblogs.com/clds/p/6016639.html
本文探讨了在Oracle数据库中进行大批量数据更新时遇到的问题及解决方案,包括如何避免更新不存在匹配项的数据行导致的NULL值问题,以及使用MERGE INTO语句提高更新效率的方法。
4451

被折叠的 条评论
为什么被折叠?



