oracle 中update set from 語句格式【轉】

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

 

update   b  set   ClientName   =   a.name   from   a,b   where   a.id   =   b.id

 (Oralce)語句: spa

 

update   b  set   (ClientName)   =  (SELECT name FROM a WHERE b.id = a.id)
 

 

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

在 SQL 中,錶鏈接(left join、right join、inner join 等)經常用於 select 語句,其實在 SQL 語法中,這些鏈接也是能夠用於 update 和 delete 語句的,在這些語句中使用 join 還經常獲得事半功倍的效果。 orm

 

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都支持的語法: class

 

 

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的寫法: date

 

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

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

 

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)
 
相關文章
相關標籤/搜索