国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

在Oracle數據庫中同時更新兩張表的簡單方法

2020-07-26 14:14:24
字體:
來源:轉載
供稿:網友

以前只會寫一些簡單的updaet語句,比如updae table set c1='XXX' 之類的

今天遇到一個數據訂正的問題,項目背景如下,有個表A,有兩個字段a1,a2還有一個關聯表B,其中也有兩個字段,b1和b2。其中a2和b2是關聯的,想把A中的字段a1更新成B中的b1

理論上sql應該挺好寫的,但是在oralce中實現了半天一直報語法錯誤。而且確實還有些小小細節沒有注意到。

首先上測試數據

表1,ZZ_TEST1

20151121174054751.jpg (422×107)

表2,ZZ_TEST2

20151121174127229.jpg (299×109)

要把表一的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條件表示一個限制條件,只更新那些符合條件的數據,也可以寫成

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中有多條數據對應T1中的數據,可以把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 THENUPDATE SET t1."text" = t2."text1"

還有一種update from 的語法,經過測試在oracle和mysql中不適用


總結一下,項目中嘗嘗需要把一張表的字段更新到另一張表中的某一個字段。可以使用update語法,并要做好限定。會使用merge的語法,另外還有一種merge的語法也可以,update from 不能再oracle和mysql中使用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 秦安县| 石城县| 新宁县| 绵竹市| 甘孜| 腾冲县| 娄底市| 筠连县| 深州市| 湘乡市| 广丰县| 和林格尔县| 资兴市| 灌南县| 玉林市| 林西县| 谢通门县| 嘉善县| 淮滨县| 宁海县| 福鼎市| 惠来县| 平凉市| 屏东县| 华安县| 平和县| 琼中| 江达县| 横峰县| 宁强县| 综艺| 竹山县| 武威市| 县级市| 邹平县| 墨脱县| 宁强县| 沂南县| 太谷县| 萨嘎县| 林州市|