關於update set from where

 

關於update set from where  

下面是這樣一個例子:

兩個表a、b,想使b中的memo字段值等於a表中對應id的name值   
  表a:id,name   
            1       王   
            2       李   
            3       張   
  表b:id,ClientName   
            1         
            2   
            3   
(MS SQL Server)語句:update   b  set   ClientName   =   a.name   from   a,b   where   a.id   =   b.id  

(Oralce)語句:update   b  set   (ClientName)   =  (SELECT name FROM a WHERE b.id = a.id)


(Mysql)語句:: UPDATE A, B SET A1 = B1, A2 = B2, A3 = B3 WHERE A.ID = B.ID


update set from 語句格式

當where和set都需要關聯一個表進行查詢時,整個 update執行時,就需要對被關聯的表進行兩次掃描,顯然效率比較低。
對於這種情況,Sybase和SQL SERVER的解決辦法是使用UPDATE...SET...FROM...WHERE...的語法,實際上就是從源表獲取更新數據。

在 SQL 中,表連接(left join、right join、inner join 等)常常用於 select 語句,其實在 SQL 語法中,這些連接也是可以用於update 和 delete 語句的,在這些語句中使用 join 還常常得到事半功倍的效果。

Update T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID
FROM T_OrderForm A LEFT JOIN T_ProductInfo   B ON B.L_ID=A.ProductID

用來同步兩個表的數據!



Oralce和DB2都支持的語法:

UPDATE A  SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)


MS SQL Server不支持這樣的語法,相對應的寫法爲:
UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  FROM A LEFT JOIN B ON A.ID = B.ID




個人感覺MS SQL Server的Update語法功能更爲強大。MS SQL SERVER的寫法:
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID

在Oracle和DB2中的寫法就比較麻煩了,如下:

UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)


Mysql的寫法是:

UPDATE A, B SET A1 = B1, A2 = B2, A3 = B3 WHERE A.ID = B.ID

發佈了8 篇原創文章 · 獲贊 5 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章