Username: Password:

删除a表中和b表相同的数据-数据库专栏,SQL Server
来源:作者: 发布时间:2007-12-25 13:39:48


删除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子句简直让人难以人忍受,速度奇慢。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅