删除a表中和b表相同的数据

数据

删除a表中和b表相同的数据
 
软件环境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安装路径为:C:ORANT
问题提出:
在做数据转储业务的时候,如果发生操作错误,有可能出现主表和副表中都有同一种数据,这样结算的结果就有可能发生错误。

实现方法:
SQL> create table a (
2 bm char(4), --编码
3 mc varchar2(20) --名称
4 )
5 /
表已建立.
SQL> insert into a values('1111','1111');
SQL> insert into a values('1112','1111');
SQL> insert into a values('1113','1111');
SQL> insert into a values('1114','1111');
SQL> insert into a values('1115','1111');
SQL> create table b as select * from a where 1=2;
表已建立.
SQL> insert into b values('1111','1111');
SQL> insert into b values('1112','1111');
SQL> insert into b values('1113','1111');
SQL> insert into b values('1114','1111');
SQL> commit;
完全提交.
SQL> select * from a;
BM MC
---- --------------------
1111 1111
1112 1111
1113 1111
1114 1111
1115 1111
SQL> select * from b;
BM MC
---- --------------------
1111 1111
1112 1111
1113 1111
1114 1111

方法一:exists子句
SQL> delete from a where exists (select 'X' from b where a.bm=b.bm and a.mc=b.mc);
删除4个记录.
where条件:如果两个表中都拥有相同字段的主键(primary key),则只需比较两个主键就可以了
方法二:in子句
SQL> delete from a where (bm,mc) in (select bm,mc from b);
删除4个记录.
SQL> select * from a;
BM MC
---- --------------------
1115 1111
实际测试结论:
在表不是很大时,用in子句速度还可以忍受,而如果记录量很多时(十万条以上),in子句简直让人难以人忍受,速度奇慢。

时间: 2024-08-24 12:06:58

删除a表中和b表相同的数据的相关文章

Visual C#来删除注册表中的注册信息

visual|注册表 在<用Visual C#读取注册信息>的文中,已经介绍了用 Visual C#来读取注册表中的注册信息.本文就来介绍用Visual C#对注册表的另外一个操作,这也是一个具有破坏性的操作过程--删除注册信息. 在上文中已经知道,由于Visual C#本身没有带类库,他对注册表的处理过程是通过调用.Net FrameWork SDK中的名称空间Microsoft.Win32中封装的二个类来实现的.这二个类就是Registry类.RegistryKey类.在 Registry

MySQL中删除大表的性能问题

微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,现做一下简单总结:(微博地址:http://weibo.com/1642466057/yuPz2guYJ) 当buffer_pool很大的时候(30G+),由于删除表时,会遍历整个buffer pool来清理数据,会导致MySQL hang住,解决的办法是: 1.当innodb_file_per_table=0的时候,以上不是问题,因为采用共享表空间的时候,该表所占用的空间不会被删除,bu

高效快速删除Oracle表中重复记录

以前的一篇删除重复记录的虽然还不错 但是在我遇到重量级的大表时还是显的力不从心,不小心想到一种新的方法 思路1.保存不重复的记录 2.保存重复记录中的一个rowid //3.删除原表中rowid不为步骤2中rowid的记录 ,留下重复数据中的一条 3.找出记录中rowid为步骤2中rowid的记录 4 .1和3数据连接就是所要的数据了 具体操作例子 第一步:www.examw.com SQL> create table xxfgs_sig as (select imeid imeid,max(d

Excel怎么快速删除工作表中空白行

  Excel怎么快速删除工作表中空白行          1.启动Excel 2013并打开工作表,这张工作表中存在一些空行.在工作表中选择数据区域,在"开始"选项卡的"编辑"组中单击"排序和筛选"按钮,在打开的下拉列表中选择"筛选"选项,如图1所示. 图1 选择"筛选"选项 2.此时,数据表的列标题右侧将会出现筛选下三角按钮,单击任意一个下三角按钮,在打开的下拉列表中取消对"全选"复

wps表格怎么添加删除工作表

一.添加工作表 方法一: 点击表格下方的"+"(新建工作表)按钮就可以添加一个工作表. 方法二: 鼠标右击某一个sheet,在弹出菜单中选择"插入"选项即可. 电脑教程 二.删除工作表 右击你所要删除的工作表sheet,选择"删除工作表"选项,即可.

Excel如何快速插入和删除工作表

  1.打开Excel表格,在左下角我们有会发现Excel有3个工作表 2.如果想要添加工作表只需点击下方的"插入工作表"即可. 3.想要删除工作表同理,只需点击该工作表然后右键选择删除即可.是不是很简单呢?

excel2010中添加删除工作表

  本教程为大家介绍一下excel2010怎么添加删除工作表,下面一起来看看具体操作吧. 一.添加工作表 方法一: 点击表格下方的" "(新建工作表)按钮就可以添加一个工作表.       方法二: 鼠标右击某一个sheet,在弹出菜单中选择"插入"选项. 在"插入"界面窗口中选择"工作表",点击"确定"按钮后就可以插入新的工作表了. 二.删除工作表 右击你所要删除的工作表sheet,选择"删除工

Excel 2007中添加或删除工作表背景

Excel 2007中,您可以将图片用作仅供显示的工作表背景.工作表背景不会被打印,也不会保留在单个工作表中或保留在另存为网页的项目中. 要点 由于不会打印工作表背景,因此不能将其用作水印.但是,通过在页眉或页脚中插入图形,您可以创造出水印的效果. 添加工作表背景 1.单击要为其显示工作表背景的工作表.请确保只选中了一个工作表. 2.在"页面布局"选项卡上的"页面设置"组中,单击"背景". "页面布局"选项卡 3.选择要用作工

怎么批处理删除注册表健值方法

  用批处理删除注册表健值的代码,需要的朋友可以参考下. 一个基本的格式参考 reg delete KeyName [/v ValueName | /ve | /va] [/f] KeyName [Machine]FullKey Machine 远程机器名 - 忽略当前机器的默认值. 远程机器上只有 HKLM 和 HKU. FullKey ROOTKEYSubKey ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey 所选 ROOTKEY 下的注