大神好,
我的问题是,下面的sql语句为什么除了会更新 S.CODE = T.CODE条件的数据, 还会更新全表的数据,
并且全部更新为 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中增加一个限制条件: