Oracle批量更新

2021-08-02 11:46:36 字數 1441 閱讀 5122

需求:將t2(t_statbuf)表中id和t1(t_mt)表相同的記錄更新進t1表。

1.錯誤的寫法:

1update table_name t1 set (a,b,c)=( select a,b,c from table_name_2 t2 where t1.a=t2.a); 

這種寫法,會更新t1表中的所有行:如果t1.a=t2.a的,就更新t2中查出的記錄進t1;如果t1.a<>t2.a的,t1中的記錄會被更新成空(null)。

正確的寫法:

1

update table_name t1 set (a,b,c)=( select a,b,c from table_name_2 t2 where t1.a=

t2.a)

2where

exists(select

1from table_name_2 t2 where t1.a=t2.a);

解析:正確的寫法,就是在後面加了一句 where exists(select 1 from table_name_2 t2 where t1.a=t2.a);

這句話的意思是:如果存在t1.a=t2.a,就更新,否則,不更新,所以不會導致t1表中所有的記錄都被更新。

例:update table_name_1 set (a,b) = (select 1,2 from dual where 1=2);

這個結果會把table_name_1中的記錄全部更新成空(null),因為後面1=2不成立。

總結:update時,要弄清限定條件,要測試!

我的測試語句:

1

update my_time_test1 t1 set (mdate,discript) =(select mdate,discript from

2 my_time_test t2 where t1.discript=t2.discript) where

exists (select

1from

3 my_time_test t2 where t1.discript=t2.discript);

我的業務語句:

1

update t_mt t1 set (stat,ostat,rpttime) =

( 2

select stat,stat,rpttime from t_statbuf t2 where t1.msgid=t2.msgid) where

exists

( 3

select

1from t_statbuf t2 where t1.msgid=t2.msgid); --

如果存在t1和t2相等的,就更新。不加where exists,是不管存不存在,都更新,不存在的,結果會被更新成空,但是那條記錄還在

oracle批量更新資料

目的 兩個表t1,t2,t1裡面的字段,id,name,t2也是,將t2表和t1表裡面相等的id的記錄的name欄位更新到t1表裡面 1 update t1 set name select t2.name from t2 where t2.id t1.id where exits select 1 ...

oracle批量更新操作

專案問題是這樣的,有一張表tb user market使用者記錄繫結使用者,一開始沒有欄位system date,後來新加的,該欄位使用者記錄使用者繫結的時間 還有一張表tb log user market 裡面記錄的是使用者的繫結歷史資訊,可能有重複的使用者記錄,即使用者先繫結後解綁又繫結的情況,...

mysql 批量更新 MySQL批量更新

我有2個表 mysql data details accounts invoices 理想情況下,每個data details都應具有accounts invoices id.data details有乙個帶有accounts invoices主鍵的外來鍵 由於某種原因,有data details記...