需求:將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)。
正確的寫法:
1update 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時,要弄清限定條件,要測試!
我的測試語句:
1update 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);
我的業務語句:
1update 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記...