正文:
需實現:將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的專欄 - CSDN博客
https://blog.csdn.net/shenxian1021/article/details/79269042
2,Oracle中的 UPDATE FROM 解決方法 - 穿林度水 - 博客園
https://www.cnblogs.com/clds/p/6016639.html