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對查詢結果進行修改,進而將修改的數據直接保存到表當中;
但是,當表中沒有主鍵時,是無法使用這種方式,修改表數據的。
寫在最后
哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!