自从版本9i之后,对于“有则更新,无则插入”有了一个新的用法,不需要再执行2次SQL了。
MERGE INTO本来应该是用来合并表的,不过因为其特性,根据用途不同可以用在以下场合:
1.合并表
2.外部数据插入更新
3.用JOIN表更新
各种情况下的
1.合并表
把表格T2的数据合并到表格T1里,根据结合条件,如果存在则更新,不存在则插入
-
-
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)
-
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.外部数据插入更新
根据外部传进来的参数,如果存在的话,用给定的参数更新,如果不存在则插入
- 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')
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`语句的基本结构如下: ```sql MERGE INTO target_table USING source_table ON (join...
Oracle的`MERGE INTO`语句是一种强大的工具,用于根据源数据更新或插入目标表的记录。这个SQL命令结合了`INSERT`, `UPDATE`和`DELETE`操作,使得在处理数据匹配和同步时更加高效。在给定的实例中,`MERGE INTO`被...
使用一条语句从一个或者多个数据源中完成对表的更新和插入数据,即某一表数据变化时另一个表数据也要发生变化,我们可以通过此语句来实现,旧数据更新,新数据则新增
1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。通过本篇文章给大家介绍sqlserver中merge函数用法详解,感兴趣的朋友一起学习吧
"Oracle Merge 函数详解" Oracle Merge 函数是一种强大的数据操作语句,用于从一个表中选择一些数据更新或者插入到另一个表中。Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge ...
merge 详解 及实例 优点: — 避免了分开更新 — 提高性能并易于使用 — 在数据仓库应用中十分有用 — 使用merge比传统的先判断再选择插入或更新快很多
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次...
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功能详解主要关注如何在大数据环境中高效、灵活地管理和更新数据,尤其在新一代数据湖技术背景下。 Upsert是一种操作,允许根据源表的数据动态地更新或插入目标表,解决了传统数仓在数据入库...
Upsert操作的核心在于`MERGE INTO`语句,它结合了`JOIN`和`DML`(数据操纵语言)的功能。当源表和目标表满足特定条件时, Upsert可以执行匹配的行动,如更新或删除,或者在不匹配时执行插入操作。例如,在GDPR(欧洲...
2. `keyProperty="id"`:这个属性指定了MyBatis应该将获取到的主键值赋给哪个Java对象的哪个属性。这里假设我们的Java对象有一个名为`id`的属性来存储主键值。 下面是一个XML配置文件中的示例: ```xml insert ...
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是一款分布式版本控制系统,它在软件开发中扮演着至关重要的角色,帮助团队协作和代码管理。IntelliJ IDEA(简称IDEA)是广受欢迎的Java集成开发环境,同样也提供了强大的Git集成功能。本文...
SAP 锁表和解锁机制详解 SAP 锁表和解锁机制是 SAP 系统中的一种机制,用于控制对数据库表的访问,以确保数据的一致性和安全性。在本文中,我们将详细介绍 SAP 锁表和解锁机制的概念、实现方法和应用场景。 一、锁...