当前位置: 代码迷 >> 综合 >> Merge into用法
  详细解决方案

Merge into用法

热度:30   发布时间:2023-12-02 00:51:24.0

Merge into是Oracle语法, 判断表中有没有符合on()条件中的数据,满足条件则可以更新数据,不满足就插入数据。【注意on后面的条件一定要用()包起来】

用法一:Insert/Update

有一个表T(指a),有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。

merge into 目标表 ausing 源表 bon(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不可省略


  "在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中"源表"的记录数"。

用法二:Insert

merge into 目标表 ausing 源表 bon(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  when  not matched then insert (a.字段1,a.字段2……)values(b.字段1,b.字段2……) --目标表别称a可省略,源表别称b不可省略

       这里只有满足条件才执行插入操作,即不会插入重复记录到数据库。

       源表b可能是一张表结构不同于a的表,有可能是一张构建相同表结构的临时表,也有可能是我们自己组起来的数据.

对于前两种很好理解。现在主要说一下组数据。

对于Oracle有dual这个系统表很好构建,如下

MERGE INTO T T1USING 
(
SELECT '1001' AS a, 2 AS b FROM dual
)  T2ON ( T1.a=T2.a)WHEN MATCHED THENUPDATE SET T1.b= T2.bWHEN NOT MATCHED THENINSERT (a,b) VALUES(T2.a,T2.b);



 

  相关解决方案