对于Oracle的两表联合更新的场景(有A、B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍:

创建用例表:

create table test1(id number(10),name varchar2(20));

create table test2(id number(10),name varchar2(20));

测试数据:

begin

insert into test1 values(1,'A');

insert into test1 values(2,'B');

insert into test2 values(1,'C');

insert into test2 values(2,'D');

end;

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);  --/*+ BYPASS_UJVC */

update (select /*+ BYPASS_UJVC */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并行parallel update两张表_Oracle并行更新的两种方式(merge/update内联视图)相关推荐

  1. Hive 两张表数据验证方案、两张大表如何进行数据验证以及剔除部分字段进行数据验证

    最近的问题是,宽表在上线之前,需要在测试环境进行试跑,试跑结束后如何跟线上正式数据进行比对呢?简单记录一下设计方案. 1.小表数据验证 一些字段比较少的表进行数据验证的方案之前出过 Hive 数据模型 ...

  2. oracle并行parallel update两张表_Oracle与并行性 parallel

    Oracle与并行性 并行化操作能力是巨型数据库(Very Large Database,简称VLDB)最重要的特性之一.带有多个CPU的数据库服务器,也被称作SMP,目前是大多数数据库服务器的标准配 ...

  3. oracle两张表数据匹配,Oracle-left join两表关联只取B表匹配到的第一条记录

    背景: A表.B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序) 经过百度,发现 row_number() over(partition by a order ...

  4. oracle横向合并两张表,SQL中将两个表合并成一个新表 SQL如何合并两个表并生成一个新表?...

    sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: select * into 表3 from ( select 字段列表1 from 表1 union all select 字段列表 ...

  5. oracle系统视图更新,Oracle内联视图更新遇到的问题

    遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理. 遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理. UPDATE ( SELEC ...

  6. oracle:一个update修改两张表

    需求:用一个update语句修改两张表? 思路:用触发器来解决 触发器代码: 表a:table_a,表b:table_b,其中表b里面有表a的id,这个触发器意思是当修改表a的最后修改人:table_ ...

  7. MySQL和Oracle中如何update一张表中的字段赋值给另一张表的字段

    MySQL 中实现将 一张表table1 中的字段name 等于table2 中的字段 name 通过相同字段no相连,实现如下: update table1 a1,table2 a2 set a1. ...

  8. oracle两张表 比较好,比较Oracle两张表的数据是否一样

    比较Oracle两张表的数据是否一样 爱搞机 2008-10-21 11:00 在某些情况下,我们会需要比较两张表的数据是否一样. 假设有两张表A与表B他的字段相同,但是当中的数据可能不同,而且有些字 ...

  9. 在同一个workprocess里对两张表分别使用online update和update function module update

    Created by Jerry Wang, last modified on Jul 22, 2014 有两张表: 用一个report测试,表1是直接online update,表2在update ...

最新文章

  1. runnable和handler联合实现计时循环
  2. java里css查找快捷键_CSS入门2—元素快捷键
  3. Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别
  4. JSONP解决跨域及ajax同步问题
  5. 给孩子一束安全的光 明基WiT MindDuo亲子共读灯首发评测
  6. 对编码通俗易懂的介绍
  7. 【干货】2021年视频号商业化产品能力介绍:招商、推广、变现-腾讯.pdf(附下载链接)...
  8. 刚刚,贺建奎回应一切:如果是我孩子,我会第一个去试验
  9. Android--UI布局
  10. java switch枚举类,使用枚举类enum代替switch
  11. 苹果电风扇软件Macs Fan Control Pro安装教程
  12. ASP.NET Web Pages:WebGrid 帮助器
  13. 最详细的世界集成电路发展历史足迹
  14. Kindle4rss中文rss资源推荐~
  15. Win10+Ubuntu双系统修复Ubuntu系统引导
  16. ChAMP 差异甲基化分析
  17. [TODO]高维空间求近似最近邻
  18. HarmonyOS:ListContainer实现表格
  19. 《Java并发编程的艺术》——线程(笔记)
  20. 2022年6月大学英语六级翻译

热门文章

  1. 什么是布隆过滤器?如何解决高并发缓存穿透问题?
  2. 使用自动化插件release来管理maven项目的版本发布
  3. 每个软件开发人员都应该精通的10个基本工具
  4. “三板斧”式文化价值体系互助协作,打通企业全流程管理模式
  5. 生态伙伴 | Tita入驻飞书啦,从目标制定到项目执行,帮你一站式解决!
  6. 从DDD看企业级问题解决方案框架
  7. OKR让伟大的企业愿景成为可能
  8. 辗转相除法是求两个数的最大公约数的方法。
  9. 自己试验写的一个文本转语音的一个小程序
  10. ios 证书更新需要重新发布么_福利站证书更新,自己有空余时间一定要学会自己用电脑签名!...