oracle 批量更新之将一个表的数据批量更新至另一个表
oracle 批量更新之将一个表的数据批量更新至另一个表
CreationTime--2018年7月3日17点38分
Author:Marydon
Oracle 将一个表的指定字段的值更新至另一个表的对应字段
案例一:
1.情景描述
testdata表数据展示

testdata2表数据展示

数据对比:
testdata表有31条数据,且有9条数据的userid与testdata2表不一致(自己独有);
testdata2表有24条数据,且有2条数据的userid与testdata2表不一致(自己独有)。
表关联:testdata表和testdata2表的userid具有关联关系
需求说明:
需要将testdata中的22条数据更新到testdata2表中
2.错误方式
这种方式,由于没有设置更新的限制条件,导致:
不仅会更新需要更新的表记录,还会将testdata2中剩余的数据字段更新为空。

3.解决方案
添加where条件,只对两表共有的数据进行更新。
2018/12/05
正确格式:
UPDATE TABLE1 T1
SET (T1.COLUMN1, T1.COLUMN2) =
(SELECT T2.COLUMN1, T2.COLUMN2 FROM TABLE2 T2 WHERE T2.ID = T1.ID) --两表能够进行关联的字段(一般是主键)
WHERE EXISTS (SELECT 1 FROM TABLE2 T2 WHERE T2.ID = T1.ID);
错误格式:
UPDATE TABLE1 T1
SET (T1.COLUMN1, T1.COLUMN2) =
(SELECT T2.COLUMN1, T2.COLUMN2 FROM TABLE2 T2 WHERE T2.ID = T1.ID)
WHERE EXISTS (SELECT 1 FROM TABLE1 T1 WHERE T1.ID = T2.ID);--exists()访问不到t2表
说明:虽然理论上,它们执行效果是一样的,但是由于exists()函数访问不到t2表,所以查询访问不到的那张表t2。
套用
--添加限制条件,进行更新
update testdata2 t2
set (t2.usercode, t2.userpassword) =
(select t.usercode, t.userpassword
from testdata t
where t.userid = t2.userid)
where exists (select 1 from testdata t where t.userid = t2.userid);

避免了全表更新。
2018/12/07
案例二:
4.索引的重要性
更新1w条以上的数据时,where后面跟的条件一定要加上索引,不然哭都来不及。
需要更新22w条数据,两张表的ID_CARD字段没有建索引

两张表的ID_CARD字段建立索引后

这是我的亲身经历,没有建索引前,执行了4个小时,没有更新完,后来由于电脑关机,导致任务终止;
建索引后,同样执行该sql,更新22w条数据只用了4秒!!!
说明:对于要执行的更新sql,使用plsql的预测功能时预测不准确,只做参考。
2019/01/10
案例三:
将VIRTUAL_CARD表中的ADDRESS字段数据更新至TEST_CARD表中的ADDRESS字段
方式一:sql实现
UPDATE TEST_CARD T
SET T.ADDRESS =
(SELECT T2.ADDRESS FROM VIRTUAL_CARD T2 WHERE T.CARDNUM = T2.CARDNUM)
WHERE EXISTS (SELECT 1 FROM VIRTUAL_CARD T2 WHERE T2.CARDNUM = T.CARDNUM)
方式二:借助plsql工具
将要更新的表的rowid查询出来,并获取最后页

编辑数据--》选中Address字段所有数据

右键--》复制--》选中第一列的Address所有数据--》粘贴

勾选上图绿色勾,提交即可。

说明:
大批量修改数据时,推荐使用方式一更新;
少量数据修改时,两种方式均可。
5.总结
A表中有几个字段的值需要批量更新,如果一个一个进行修改,太慢了:
将批量修改后的内容放到一个新的表中B,并与要更新的表A建立关联关系。
第一步:建新表
两表关联字段(column1):A表中该字段必须具有唯一性;
要更新的字段(column5,cloumn6,...)。
第二步:导数据
将新表字段及每条记录更新后内容放到excel中,导入oracle数据库中B表。
第三步:根据两表关联关系,将B表数据批量更新到A表中。
oracle 批量更新之将一个表的数据批量更新至另一个表的更多相关文章
- mysql中把一个表的数据批量导入另一个表中
mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- 使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
一.需求 我们会遇到开发任务: 经理:小王,你来做一下把数据库里的数据导出到Excel中,一个表是一个sheet,不要一个表一个Excel. 小王:好的,经理.(内心一脸懵逼) 二.前期准备 首先我们 ...
- 一条sql解决.一张表的数据复制到另外一张表
如何把一个表的数组复制到一张表?也许很多人会把这个表查出来的数据再插入到另外一张表里面,这样很麻烦又要写代码逻辑去处理,其实一条sql语句就可以把一张表的数据复制到另外一张表,或者一张表的某一条数据复 ...
- hive sql 查询一张表的数据不在另一张表中
有时,我们需要对比两张表的数据,找到在其中一张表,不在另一张表中的数据 hql 如下: SELECT * FROM (SELECT id FROM a WHERE dt = '2019-03-17' ...
- oracle triggers 实现两个结构相同的表的数据级联更新操作
首先创建两个结构相同的表 -- Create table create table TABLE_TEMP ( userid NUMBER not null, username NVARCHAR2(50 ...
- 在oracle中怎么把一张表的数据插入到另一张表中
把table2表的数据插入到table1中 insert into table1 select * from table2
- SQL从一个表查询数据插入/更新到另一个表
示例一: 从数据库表A中查询出数据插入到数据库表B 从数据库DataBaseA的表TDA中查询出数据插入到数据库DataBaseB的表TDB insert into [DataBaseA].[dbo] ...
- 通过mapreduce把mysql的一张表的数据导到另外一张表中
怎么安装hadoop集群我在这里就不多说了,我这里安装的是三节点的集群 先在主节点安装mysql 启动mysql 登录mysql 创建数据库,创建表格,先把数据加载到表格 t ,表格t2是空的 mys ...
随机推荐
- systemtap 用户态调试2
[root@localhost ~]# cat user.stpprobe process(@1).function(@2){print_ubacktrace();exit();} session 1 ...
- HTTP的KeepAlive是开启还是关闭?
HTTP的KeepAlive是开启还是关闭? http://itindex.net/detail/50719-http-keepalive 1.KeepAlive的概念与优势 HTTP的KeepAli ...
- nyoj 164&&poj2084 Game of Connections 【卡特兰】
题意:将1~2n个数依照顺时针排列好.用一条线将两个数字连接起来要求:线之间不能有交点.同一个点仅仅同意被连一次. 最后问给出一个n,有多少种方式满足条件. 分析: ans[n]表示n的中的种类数. ...
- 使用Dictionary泛型集合封装业务逻辑判断 z
C#2.0 提供了Dictionary 泛型类,它提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及其相关联的键组成.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictio ...
- QT编程之——使用全局变量
在Qt中使用全局变量的实例 1.首先须要在一个头文件里对全局了变量使用exern方法进行定义. //g.h extern char *testStr; 2.仅仅能在cpp文件里对事实上例化,而且实例化 ...
- 【BZOJ】【2595】【WC2008】游览计划
Orz zky神犇http://blog.csdn.net/iamzky/article/details/42029921 spfa的灵活应用!(好像是求了一个叫做斯坦纳树的东西……) o(︶︿︶)o ...
- Kmeans算法原理极其opencv实现(转帖)
原帖地址:http://blog.csdn.net/qll125596718/article/details/8243404 1.基本Kmeans算法[1] 选择K个点作为初始质心 repeat ...
- (转)看懂UML类图和时序图
从一个示例开始 请看以下这个类图,类之间的关系是我们需要关注的: 车的类图结构为<<abstract>>,表示车是一个抽象类: 它有两个继承类:小汽车和自行车:它们之间的关系为 ...
- C# WCF 完整实例,winform 窗体作为 宿主
上一次提到,我们的WCF程序宿主是发布到IIS上面的.虽然这样做未尝不可,不过不便于我们进行“开始”或“停止”WCF服务的操作.所以再次尝试了编写以窗体应用程序作为WCF服务宿主的方式,并取得了成功. ...
- 微软 WCF的几种寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服务
WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详 ...