日期:2014-05-16  浏览次数:20511 次

Oracle用一个表的列更新另一个表对应记录的列,一不小心有字段就更新为空了

刚开始我在网上搜索的用的下面这种方法:

    update tbl1 a

  set (a.col1, a.col2) = (select b.col1, b.col2

  from tbl2 b

  where a.key = b.key)

然后,使用后把我坑惨了。我直接在服务器上做的操作,做完后,居然登录不上系统了。后来才发现,有一个字段的值因为这个语句更新为空了,而登录时是用了视图的。这个字段正好是视图连接表时要用到的。好多用户反应也登录不上了,真是悲惨啊!

后来百度才知道原来是这个原因,如果 tbl1.key 的值在 tbl2.key 中没有此值时,这个更新的两个字段 tbl1.col1 和 tbl1.col2 字段会被更新为空值(null)。

速度借鉴大神的写法:

   update tbl1 a

  set (a.col1, a.col2) = (select b.col1, b.col2

  from tbl2 b

  where a.key = b.key)

  where a.key in(select key from tbl2)//这一句是相当的关键啊。

特别感谢:http://www.codesky.net/article/201004/167714.html这位大神!

记录下这个问题,供以后参考,也供大家使用。