在Oracle數(shù)據(jù)庫中同時更新兩張表的簡單方法
以前只會寫一些簡單的updaet語句,比如updae table set c1='XXX' 之類的
今天遇到一個數(shù)據(jù)訂正的問題,項目背景如下,有個表A,有兩個字段a1,a2還有一個關聯(lián)表B,其中也有兩個字段,b1和b2。其中a2和b2是關聯(lián)的,想把A中的字段a1更新成B中的b1
理論上sql應該挺好寫的,但是在oralce中實現(xiàn)了半天一直報語法錯誤。而且確實還有些小小細節(jié)沒有注意到。
首先上測試數(shù)據(jù)
表1,ZZ_TEST1
表2,ZZ_TEST2
要把表一的text更新成表二的text1值,對應的sql如下:
update ZZ_TEST1 t1 set t1."text" = ( select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id" ) WHERE EXISTS ( SELECT 1 FROM ZZ_TEST2 t2 where T2."pid"=t1."id" )
后面的where條件表示一個限制條件,只更新那些符合條件的數(shù)據(jù),也可以寫成
update ZZ_TEST1 t1 set t1."text" = ( select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id" ) where t1."id" in (select "pid" from ZZ_TEST2 )
另外還有一種merge的寫法,對應的sql如下:
merge into ZZ_TEST1 t1 using ZZ_TEST2 t2 on (t1."id" =t2."pid") when matched then update set t1."text"=t2."text1"
為了避免T2中有多條數(shù)據(jù)對應T1中的數(shù)據(jù),可以把sql改成如下的方式:
MERGE INTO ZZ_TEST1 t1 USING ( SELECT * FROM ZZ_TEST2 X WHERE X. ROWID = (SELECT MAX(Y.ROWID) FROM ZZ_TEST2 Y WHERE X."id" = Y."id" ) ) t2 ON (t1."id" = t2."pid") WHEN MATCHED THEN UPDATE SET t1."text" = t2."text1"
還有一種update from 的語法,經(jīng)過測試在oracle和mysql中不適用
總結一下,項目中嘗嘗需要把一張表的字段更新到另一張表中的某一個字段。可以使用update語法,并要做好限定。會使用merge的語法,另外還有一種merge的語法也可以,update from 不能再oracle和mysql中使用。
相關文章
Oracle使用pivot和unpivot函數(shù)實現(xiàn)行列轉換
項目開發(fā)過程中常常會涉及到oracle數(shù)據(jù)庫的一個數(shù)據(jù)操作,那就是行列的互轉,本文為大家介紹了兩個可以實現(xiàn)這一操作的函數(shù)pivot和unpivot,感興趣的可以了解一下2023-06-06Oracle 分析函數(shù)RANK(),ROW_NUMBER(),LAG()等的使用方法
Oracle分析函數(shù)RANK(),ROW_NUMBER(),LAG()等的使用方法,需要的朋友可以參考下。2009-11-11Linux一鍵部署oracle安裝環(huán)境腳本(推薦)
這篇文章主要介紹了Linux一鍵部署oracle安裝環(huán)境腳本,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01Oracle?Database?23c新特性之關聯(lián)更新和刪除示例詳解
這篇文章主要介紹了Oracle?Database?23c新特性之關聯(lián)更新和刪除的相關資料,Oracle database 23c開始支持在UPDATE和DELETE語句中使用JOIN連接,獲取更新和刪除的數(shù)據(jù)源,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-06-06詳解PL/SQL Developer連接本地Oracle 11g 64位數(shù)據(jù)庫
本篇文章主要介紹了PL/SQL Developer連接本地Oracle 11g 64位數(shù)據(jù)庫 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Oracle rac環(huán)境的數(shù)據(jù)庫導入操作步驟
Oracle RAC是一種基于共享存儲和共享數(shù)據(jù)庫的集群解決方案,可以將多個 Oracle 數(shù)據(jù)庫實例連接成一個邏輯上的單一數(shù)據(jù)庫,提供高可用性、靈活性和可伸縮性,本文給大家介紹Oracle rac環(huán)境的數(shù)據(jù)庫導入操作,感興趣的朋友一起看看吧2023-06-06