sql update select(使用select結果進行update)


1.情景展示

  現在有一需求:

  如上圖所示,需將指定記錄集的指定字段更新成該條記錄的對應的字段值,使用一條sql如何實現?

2.原因分析

  要更新的記錄及字段:

  將要更新的字段值: 

     

3.oracle

     UPDATE CZ_UNITINFO 
SET ( APPID, APPKEY, CODE_CZ, CRECODE, `X509`, BILLCODE )=(
    SELECT
        T2.APPID,
        T2.APPKEY,
        T2.CODE_CZ,
        T2.CRECODE,
        T2.`X509`,
        T2.BILLCODE 
    FROM
        CZ_UNITINFO T2 
    WHERE
        T2.INVOICINGPARTYNAME =      '平輿縣陽城鎮中心衛生院'
    ) 
WHERE
    INVOICINGPARTYNAME      LIKE '%尉氏%' ;

4.mysql

  需要使用內連接INNER JOIN才能實現:

  把查詢結果放到內聯接中,我這里只有單條查詢結果,如果是多條查詢結果的話,要想實現一一對照進行更新,where條件就需要將t2表和t1表進行關聯了;

     UPDATE CZ_UNITINFO2 T1
INNER JOIN (      SELECT APPID, APPKEY, CODE_CZ, CRECODE, `X509`, BILLCODE      FROM CZ_UNITINFO2      WHERE INVOICINGPARTYNAME =      '阿里巴巴' ) T2 
SET T1.APPID = T2.APPID,
T1.APPKEY = T2.APPKEY,
T1.CODE_CZ = T2.CODE_CZ,
T1.CRECODE = T2.CRECODE,
T1.`X509` = T2.`X509`,
T1.BILLCODE = T2.BILLCODE 
WHERE
    T1.INVOICINGPARTYNAME      LIKE '%騰訊%' ;

5.拓展

關於update

我們知道普通的更新語句結構為:

update table_name set column1=value1,column2=value2,...;

但是,當我們使用update table_name set column1=value1 and column2=value2,...時,會發生什么?

雖然不報錯,並且可以順利執行SQL,但是,原有數據並未得到更新。

關於影響行數

對於原有數據進行修改成功后,返回的影響行數才不會為0;

當要更新的數據與現有數據一致時,將不會進行更新(比如:同一條SQL語句執行更新兩次)。

  2022年5月24日09:49:20

關於for update

在mysql當中,我們知道:

可以使用for update對查詢結果進行修改,進而將修改的數據直接保存到表當中;

但是,當表中沒有主鍵時,是無法使用這種方式,修改表數據的。

 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM