`

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`的使用,包括两种常见的写法,并通过实例进行说明。 一、`MERGE INTO`的基本语法 `MERGE INTO`语句的基本结构如下: ```sql MERGE INTO target_table USING source_table ON (join...

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

    Oracle的`MERGE INTO`语句是一种强大的工具,用于根据源数据更新或插入目标表的记录。这个SQL命令结合了`INSERT`, `UPDATE`和`DELETE`操作,使得在处理数据匹配和同步时更加高效。在给定的实例中,`MERGE INTO`被...

    merge用法详解(实例详解)

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

    Mysql合并表Merge引擎

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

    SQLServer中merge函数用法详解

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

    oracle Merge 函数.doc

    "Oracle Merge 函数详解" Oracle Merge 函数是一种强大的数据操作语句,用于从一个表中选择一些数据更新或者插入到另一个表中。Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge ...

    oracle 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...

    数据湖分析之Upsert详解.pdf

    数据湖分析中的Upsert功能详解主要关注如何在大数据环境中高效、灵活地管理和更新数据,尤其在新一代数据湖技术背景下。 Upsert是一种操作,允许根据源表的数据动态地更新或插入目标表,解决了传统数仓在数据入库...

    数据湖分析之Upsert功能详解.pptx

    Upsert操作的核心在于`MERGE INTO`语句,它结合了`JOIN`和`DML`(数据操纵语言)的功能。当源表和目标表满足特定条件时, Upsert可以执行匹配的行动,如更新或删除,或者在不匹配时执行插入操作。例如,在GDPR(欧洲...

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

    2. `keyProperty="id"`:这个属性指定了MyBatis应该将获取到的主键值赋给哪个Java对象的哪个属性。这里假设我们的Java对象有一个名为`id`的属性来存储主键值。 下面是一个XML配置文件中的示例: ```xml insert ...

    oracle的update的五种方式

    Merge 更新法是 Oracle 特有的语句,语法为:`MERGE INTO table_name alias1 USING (table|view|sub_query) alias2 ON (join condition) WHEN MATCHED THEN UPDATE table_name SET ... WHEN NOT MATCHED THEN INSERT...

    Git实战IDEA操作

    Git实战IDEA操作详解 Git是一款分布式版本控制系统,它在软件开发中扮演着至关重要的角色,帮助团队协作和代码管理。IntelliJ IDEA(简称IDEA)是广受欢迎的Java集成开发环境,同样也提供了强大的Git集成功能。本文...

    sap 锁表和解锁 带图片

    SAP 锁表和解锁机制详解 SAP 锁表和解锁机制是 SAP 系统中的一种机制,用于控制对数据库表的访问,以确保数据的一致性和安全性。在本文中,我们将详细介绍 SAP 锁表和解锁机制的概念、实现方法和应用场景。 一、锁...

Global site tag (gtag.js) - Google Analytics