Merge into用法原创
8人赞赏了该文章
2,487次浏览
编辑于2021年09月29日 10:55:11
我们经常会遇到这样的场景,如果数据库有记录则更新,没有则插入一条数据
在sqlserver 里面我们可以这样写:
if exists (select 1 from A where A.a = xxx) update A set A.b=xxx else insert into A(a,b) values(xxx,xxx)
但是Oracle不支持这种写法,Oracle使用的是merge into
merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……) when matched then update set a.更新字段=b.字段 when not macthed then insert into a(字段1,字段2……)values(值1,值2……)
如果目标表和源表都是一个表,
Oracle有dual这个系统表很好构建
MERGEINTO T T1 USING (SELECT'1001'AS a,2AS bFROM dual) T2 ON ( T1.a=T2.a) WHEN MATCHEDTHEN UPDATESET T1.b= T2.b WHENNOT MATCHEDTHEN INSERT (a,b)VALUES(T2.a,T2.b);
需要保证的是根据比较条件,源表B的记录是没有重复的,
因为如果有重复的记录,它不知道用哪条数记录去更新目标表
就比如上面的那条sql,T2表a字段是唯一标识
赞 8
8人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读