排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

前言
if not exists 判断 后面括号中的语句是否可以查询到数据, 如果能查询到则执行else后面的 update语句
如果 查询不到 则会执行 insert 语句 ,注意, 前面括号中的查询语句条件 和 后面的 update语句的条件要一致, update语句 中 set的数据要和where 后面的条件一致, 否则 执行两次会插入一条重复数据.
这个语法对于SQL只能更改一条语句,并且Oracle不能使用
所以就有了Merge into(Oracle 9i引入的功能)语法
If not exists 用法
- if not exists (select id,abc,def from A_TEST where id = ‘A’ and abc = ‘B’)
- INSERT INTO A_TEST (id,abc,def,ddd) VALUES(‘A’,’B’,’C’,’D’)
- else update A_TEST set id = ‘A’,abc=’B’ ,def=’def’,ddd=’ddd’ where id = ‘A’ and abc = ‘B’
MERGE INTO 用法
- merge into 目标表 a
-
- using 源表 b
-
- on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)
-
- when matched then update set a.字段=b.字段 --目标表别称a和源表别称b都不要省略
-
- when not matched then insert (a.字段1,a.字段2……)values(b.字段1,b.字段2……) --目标表别称a可省略,源表别称b不可省略
下边放一块实战代码
- MERGE INTO T_JCZX_DTXX_SYDT a
- USING ( select * from T_JCZX_ZSJ_XMK) b
- ON (a.XMMC = b.XMMC)
- WHEN matched THEN update set a.[XMMC]=b.XMMC ,a.[XMLX] =b.[XMLX],a.[XMZT]=b.[XMZT],a.[YWLY] =b.[YWLY],a.[XMTRJE]=b.[XMTRJE],a.[XMSSOY]=b.XMSSQY_Sheng,a.[XMJLID] =b.XMJL,a.XMJLMC = b.XMJLName,a.GSNY = b.LXRJ
- WHEN NOT matched THEN
- insert ([ID]
- ,[BaseIsDeleted]
- ,[BaseCreatorID]
- ,[BaseModifierID]
- ,[BaseCreator]
- ,[BaseModifier]
- ,[BaseCreateTime]
- ,[BaseModifyTime]
- ,[XMMC]
- ,[XMLX]
- ,[XMZT]
- ,[YWLY]
- ,[XMTRJE]
- ,[XMSSOY]
- ,[XMJLID]
- ,[XMJLMC]
- ,[XMJD]
- ,[XMWD]
- ,[GSNY] ) values( newID() ,[BaseIsDeleted]
- ,[BaseCreatorID]
- ,[BaseModifierID]
- ,[BaseCreator]
- ,[BaseModifier]
- ,[BaseCreateTime]
- ,[BaseModifyTime]
- ,b.[XMMC]
- ,b.[XMLX]
- ,b.[XMZT]
- ,b.[YWLY]
- ,b.[XMTRJE]
- ,b.XMSSQY_Sheng
- ,b.XMJL
- ,b.XMJLName
- ,0
- ,0
- ,b.LXRJ );
评价