在Oracle資料庫中同時更新兩張表的簡單方法_oracle

來源:互聯網
上載者:User

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

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

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

首先上測試資料

表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條件表示一個限制條件,只更新那些合格資料,也可以寫成

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中使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.