中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > Oracle
Oracle数据库删除两表中相同数据的方法
作者:changelive 时间:2007-06-20 16:04 出处:ccidnet.com 责编:月夜寒箫
              摘要:Oracle数据库删除两表中相同数据的方法

在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 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子句速度很慢。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有