当前位置: 首页 > 图文教程 > 数据库 > Oracle > Oracle数据库删除两表中相同数据的方法

Oracle
常见的一些Oracle初学者的问题
ORACLE认证系统概述
数据库考试简介:Oracle认证
Oracle认证基础知识介绍
ADO连接Oracle Access示例及记录集处理源码
SQL Server和MySQL的安全性分析
用Oracle和SQL Server数据库组合利弊分析
Oracle 11g分区功能新革命
Flashback Query 恢复误删除的数据
基于Oracle高性能动态SQL程序开发
怎样在Oracle 9i中正确的转换时区
Oracle 10g导出的数据库能否导入Oracle 9i?
增加Distinct后查询效率反而提高
Oracle限制返回结果集的大小
Java语言数据库操作的基本流程
美国甲骨文(ORACLE)公司入驻渝中区大都会商厦
RHEL AS4上安装oracle 10R2 的方法
DB中如何查询Table占用空间的大小
编写高质量高性能的MySQL语法
Oracle数据库自动备份的具体实现步骤

Oracle数据库删除两表中相同数据的方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 89 ::
收藏到网摘: n/a

在Oracle数据库中删除两表中相同数据的方法是用到in语句,本文通过实例来讲解删除两表中相同数据的方法。

软件环境:

1、Windows NT4.0+ORACLE 8.0.4。

2、Oracle安装路径为:C:\ORANT。

问题提出:

1、在做数据转储业务的时候,如果发生操作错误,有可能出现主表和副表中都有同一种数据,

这样结算的结果就有可能发生错误。

实现方法:

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 11111112 11111113 11111114 11111115 1111SQL> select * from b;BM  MC---- --------------------1111 11111112 11111113 11111114 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子句速度很慢。