排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
分类:
SQL
前言
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 );
评价