日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle批量update

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle批量update 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我個人覺得寫的很好

http://blog.csdn.net/wanglilin/article/details/7200201

需求:

將t2(t_statbuf)表中id和t1(T_Mt)表相同的記錄更新進(jìn)t1表。

1.錯誤的寫法:

?1?update?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中查出的記錄進(jìn)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) 2 where exists(select 1 from 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,就更新,否則,不更新,所以不會導(dǎo)致t1表中所有的記錄都被更新。

例:

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

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

總結(jié):

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 1 from 3 my_time_test t2 where t1.DISCRIPT=t2.DISCRIPT);

我的業(yè)務(wù)語句:

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 1 from t_statbuf t2 where t1.MsgId=t2.MsgId); --如果存在t1和t2相等的,就更新。不加where exists,是不管存不存在,都更新,不存在的,結(jié)果會被更新成空,但是那條記錄還在

轉(zhuǎn)載于:https://www.cnblogs.com/remember-forget/p/8970720.html

總結(jié)

以上是生活随笔為你收集整理的oracle批量update的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。