1.在複雜的Update語句中,Oracle一般用子查詢來實現。比如:
update table1 t1 set c1=(select t2.c1 from table2 t2 where t1.c2=t2.c2)
[擴展]
當然,如果單純的將該語句複製到sqlserver 中運行的話會提示語法錯誤:行一出現語法錯誤.
這個時候你可能會想既然不支持別名的話,直接用表名好了,修改語句爲:
update table1 set c1=(select t2.c1 from table2 t2 where table1.c2=t2.c2) 這個語句確實在sqlserver中能運行,如果你真的運行了它,你就會悲劇了。因爲table1中所有的記錄都被更新過,而且一部分本不需要更的記錄被更新成了null,而不是像oracle中只對符合子查詢的記錄進行更新。
2. sqlserver中怎麼來對這種情況進行更新的呢?答案是update from。
在sqlserver中要正常對這種情況進行處理的話,需要將上述sql語句進行修改,修改後的sql如下:
update table1 set c1=t2.c2 from table2 t2 where c2=t2.c1