`

Merge into 使用详解(2)

 
阅读更多

自从版本9i之后,对于“有则更新,无则插入”有了一个新的用法,不需要再执行2次SQL了。

MERGE INTO本来应该是用来合并表的,不过因为其特性,根据用途不同可以用在以下场合:

1.合并表
2.外部数据插入更新
3.用JOIN表更新

各种情况下的
1.合并表
把表格T2的数据合并到表格T1里,根据结合条件,如果存在则更新,不存在则插入

Sql代码 复制代码 收藏代码
  1.     
  2. MERGE INTO T1   
  3. USING T1 ON(   
  4.   T1.user_id = T2.user_id   
  5. )   
  6. WHEN MATCHED THEN  
  7.   UPDATE SET  
  8.          T1.user_nm = T2.user_nm   
  9. WHEN NOT MATCHED THEN  
  10.   INSERT    
  11.      (user_id,user_nm)   
  12.   VALUES  
  13.      (T2.user_id,T2.user_nm)   
  14.    
 
MERGE INTO T1
USING T1 ON(
  T1.user_id = T2.user_id
)
WHEN MATCHED THEN
  UPDATE SET
         T1.user_nm = T2.user_nm
WHEN NOT MATCHED THEN
  INSERT 
     (user_id,user_nm)
  VALUES
     (T2.user_id,T2.user_nm)
 


2.外部数据插入更新
根据外部传进来的参数,如果存在的话,用给定的参数更新,如果不存在则插入

Sql代码 复制代码 收藏代码
  1. MERGE INTO T1   
  2. USER DUAL ON(   
  3.   T1.user_id = '001'  
  4. )   
  5. WHEN MATCHED THEN  
  6.   UPDATE SET  
  7.      T1.user_nm = 'David Vi'  
  8. WHEN NOT MATCHED THEN  
  9.   INSERT  
  10.      (user_id, user_nm)   
  11.   VALUES  
  12.      ('001','David Vi')  
MERGE INTO T1
USER DUAL ON(
  T1.user_id = '001'
)
WHEN MATCHED THEN
  UPDATE SET
     T1.user_nm = 'David Vi'
WHEN NOT MATCHED THEN
  INSERT
     (user_id, user_nm)
  VALUES
     ('001','David Vi')


3.用JOIN表更新
这个其实和第一个应用差不多,就是USING内部是个多个表进行结合的子表,根据多个表的结合查询然后对对象表进行更新。

对于第1,3应用有个问题,就是更新对象表和USING表(子表)是1:N的关系的话,无法更新。
另外,对于第3个应用,不如用VIEW更新来的快。

分享到:
评论

相关推荐

    Merge into的使用详解

    Merge into写法,含两种,带实例说明

    Mysql合并表Merge引擎

    1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...

    oracle数据匹配merge into的实例详解

    主要介绍了oracle数据匹配merge into的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

    SQLServer中merge函数用法详解

    Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。通过本篇文章给大家介绍sqlserver中merge函数用法详解,感兴趣的朋友一起学习吧

    oracle merge

    merge 详解 及实例 优点:  — 避免了分开更新  — 提高性能并易于使用  — 在数据仓库应用中十分有用  — 使用merge比传统的先判断再选择插入或更新快很多

    merge用法详解(实例详解)

    使用一条语句从一个或者多个数据源中完成对表的更新和插入数据,即某一表数据变化时另一个表数据也要发生变化,我们可以通过此语句来实现,旧数据更新,新数据则新增

    Oracle merge合并更新函数实例详解

    MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次...

    1Z0-47试题详解

    1Z0-47试题详解。例如: 1. You need to load information about new customers from the NEW_CUST table into the tables CUST and CUST_SPECIAL. If a new customer has a credit limit greater than 10,000, then...

    MyBatis获取数据库自生成的主键Id详解及实例代码

    主要介绍了MyBatis获取数据库自生成的主键Id详解及实例代码的相关资料,需要的朋友可以参考下

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    7.2.5 在集合运算中使用INTO 7.2.6 避开不支持的逻辑阶段 7.3 总结 第8章 数据聚合和透视 8.1 OVER 子句 8.2 决胜属性(Tiebreaker) 8.3 连续聚合 8.3.1 累积聚合(Cumulative Aggregation) 8.3.2 滑动...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    7.2.5 在集合运算中使用INTO336 7.2.6 避开不支持的逻辑阶段336 7.3 总结338 第8章 数据聚合和透视339 8.1 OVER 子句339 8.2 决胜属性(Tiebreaker)341 8.3 连续聚合343 8.3.1 累积聚合(Cumulative Aggregation)...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录 中文版

    7.2.5 在集合运算中使用INTO336 7.2.6 避开不支持的逻辑阶段336 7.3 总结338 第8章 数据聚合和透视339 8.1 OVER 子句339 8.2 决胜属性(Tiebreaker)341 8.3 连续聚合343 8.3.1 累积聚合(Cumulative ...

Global site tag (gtag.js) - Google Analytics