剛開始我在網上搜索的用的下面這種方法:
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這位大神!
記錄下這個問題,供以後參考,也供大家使用。