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

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

大神好,

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

-- 更新當(dāng)月的 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對(duì)應(yīng)的記錄,SET賦值語句中右邊的SQL會(huì)返回NULL,所以TABLE_1中的字段就變成NULL了。
如果想避免這種情況,可以在UPDATE的WHERE中增加一個(gè)限制條件:

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