在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數(shù)據(jù)庫/ 關于ORACLE 數(shù)據(jù)庫連表更新的問題

關于ORACLE 數(shù)據(jù)庫連表更新的問題

大神好,

我的問題是,下面的sql語句為什么除了會更新 S.CODE = T.CODE條件的數(shù)據(jù), 還會更新全表的數(shù)據(jù),
并且全部更新為 null了,什么原因?

-- 更新當月的 TYPE_CODE 和 TYPE_TXT

UPDATE TABLE_1 T
 SET (T.TYPE_CODE, T.TYPE_TXT) =
   (SELECT S.TYPE_CODE, S.TYPE_TXT
      FROM TABLE_2 S
     WHERE S.CODE = T.CODE)
WHERE T.MONTH = TRUNC(SYSDATE, 'MM');
回答
編輯回答
爛人

你這種寫法,如果在TABLE_2 中找不到T.CODE對應的記錄,SET賦值語句中右邊的SQL會返回NULL,所以TABLE_1中的字段就變成NULL了。
如果想避免這種情況,可以在UPDATE的WHERE中增加一個限制條件:

UPDATE TABLE_1 T
 SET (T.TYPE_CODE, T.TYPE_TXT) =
   (SELECT S.TYPE_CODE, S.TYPE_TXT
      FROM TABLE_2 S
     WHERE S.CODE = T.CODE)
WHERE T.MONTH = TRUNC(SYSDATE, 'MM') AND
EXISTS(SELECT 1 FROM TABLE_2 WHERE TABLE_2 .CODE = T.CODE)
2017年3月23日 07:31