对于Oracle的两表联合更新的场景(有A、B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍:
创建用例表:
CREATE TABLE test1(ID NUMBER(10),NAME VARCHAR2(20));
INSERT INTO test1 VALUES(1,'lucy');
INSERT INTO test1 VALUES(2,'lily');
CREATE TABLE test2(ID NUMBER(10),NAME VARCHAR2(20));
INSERT INTO test2 VALUES(1,'lucy');
INSERT INTO test2 VALUES(2,'hanmeimei');
merge方式:
MERGE INTO test1 USING test2
ON (test1.id = test2.id)
WHEN MATCHED THEN UPDATE
SET test1.name = NVL2(test1.name,test2.name,test1.name);
merge方法是最简洁,效率最高的方式,在大数据量更新时优先使用这种方式。
update内联视图方式:
使用这种方式必须在test2.id上有主键(这里很好理解,必须保证每一个test1.id对应在test2里只有一条记录,如果test2中有多条对应的记录,怎么更新test1?),一般而言这种方式代价比merge方式稍高。
ALTER TABLE test2 ADD CONSTRAINT pk_test2 PRIMARY KEY(ID);
UPDATE (SELECT a.id aid,a.name aname,b.id bid,b.name bname FROM TEST1 a,test2 b WHERE a.id=b.id) t
SET aname = NVL2(aname,bname,aname);
使用并行,加快大量数据更新:
MERGE /*+parallel(test1,4)*/ INTO test1 USING test2
ON (test1.id = test2.id)
WHEN MATCHED THEN UPDATE
SET test1.name = NVL2(test1.name,test2.name,test1.name);
相关推荐
实际项目中遇到的问题总结:数据量百万级,千万级。Oracle中update语句的优化,一共四种方案,工作中遇到该类问题可以参考。
本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...
Hibernate中session的merge以及update方法
oracle merge 用法详解
oracle merge into的使用,开发必备的。
Hibernate merge、update与saveOrUpdate方法的区别
自己写的一些简单算法和数据结构的代码 快排 堆排 归并 二分查找 单链表
在Oracle 9i R2版中引入的MERGE语句通常被称作“更新插入”(upsert),因为使用MERGE可以在同一个步骤中更新(update)并插入(insert)数据行。。。。。。
前言 MERGE语句是Oracle9i...本博客介绍一下Oracle merge合并函数,业务场景:新增数据的时候要先查询数据库是否已经有改数据,有数据就更新数据,没数据才新增数据,这是很常见的业务场景,如果是用Oracle数据库的话
关于Oracle中merge into的用法,比较实用哦
## 环境 - numpy - matplotlib - random - pillow ## 文件结构 - main.py - 主文件 - 直接运行即可得到对应题目 ... - 将文件保存在`merge/A`对应的是答案为A的题目,`merge/B`,`merge/C`,`merge/D`同理
oracle使用 merge 更新或插入数据(总结)
Oracle中merge into的使用 很有用的哦 学习一下
oracle同一个表中使用merge
UPDATE 表2 SET 表2.C = (SELECT B FROM 表1 WHERE 表1.A = 表2.A) WHERE EXISTS (SELECT 1 FROM 表1 WHERE 表1.A = 表2.A); 尤其注意最后的外层where条件尤为重要,是锁定其批量更新数据的范围。 方法二: ...
oracle Merge 函数
Araxis Merge是一款比对软件工具,不仅支持单个文件的比对,而且支持对两个文件夹的所有文件进行对比,并实时修改。用了蛮久感觉很好用,所以分享给大家。 里面给大家内嵌了Araxis Merge v6.5和Araxis Merge 2017两...
非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者
浅谈Oracle数据库中Merge Into的用法.pdf