自从版本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写法,含两种,带实例说明
1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...
主要介绍了oracle数据匹配merge into的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。通过本篇文章给大家介绍sqlserver中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...
主要介绍了MyBatis获取数据库自生成的主键Id详解及实例代码的相关资料,需要的朋友可以参考下
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 滑动...
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)...
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 ...