日期:2014-05-16 浏览次数:20511 次
刚开始我在网上搜索的用的下面这种方法:
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这位大神!
记录下这个问题,供以后参考,也供大家使用。