批量更新字段——把表A的某個字段值複製到表B的某個字段

1、需求

在同一張表中,將2019年數據的AAG004字段值 更新 到2020年數據的AAG006字段中。

2、表結構 AAG01

 

銀行 AAG01 AZY001 年度
銀行 AAG01 AAG000 系統碼
銀行 AAG01 AAG001 銀行編碼
銀行 AAG01 AAG002 銀行名稱
銀行 AAG01 AAG004 一點清算行號
銀行 AAG01 AAG006 支付行號
銀行 AAG01 AZY005 停用標誌

3、DB2的寫法:

update  AAG01 as a 
set a.AAG006 = (select b.AAG004 from AAG01 as b where b.AAG000=a.AAG000 and b.AZY001='2019' and   b.AZY005='0')
where a.AZY005='0'  and a.AZY001='2020'

mysql的寫法:

update aag01 a,aag01 b 
set a.aag006=b.aag004 
where a.AAG000=b.aag000 and a.AZY001='2020' 
and a.azy005='0' and b.azy001='2019' and b.azy005='0'
 

如果按照db2的寫法到mysql環境中執行會報錯:

格式:You can't specify target table '表名' for update in FROM clause
You can't specify target table 'a' for update in FROM clause
翻譯爲:不能先select出同一表中的某些值,再update這個表(在同一語句中)

4、db2寫法中用到了關於update set from where  寫法,這個需要掌握。

關於update set from where  

下面是這樣一個例子:

兩個表a、b,想使b中的ClientName 字段值等於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

文章第四點參考:https://blog.csdn.net/xcbsdu/article/details/6736503

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章