Merge into用法原创
金蝶云社区-CM9527
CM9527
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人打赏
还没有人打赏,快来当第一个打赏的人吧!