注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Sky

积蓄能量,准备奔跑!

 
 
 

日志

 
 

删除Oracle重复记录  

2007-10-16 22:12:52|  分类: Oracle学习笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

由于程序员的疏忽,会在数据库中生成很多重复的记录,删除重复记录可以说是数据库中常见的操作了,但是不同的DBMS还有所不同,下面简单介绍一下Oracle中删除重复记录的方法:

数据库中的重复记录以两种意义存在:

1、是完全重复的记录,也即所有字段均重复的记录;

2、是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略

解决方案:

1、对于第一种重复,比较容易解决,而且不同的DBMS的解决方法类似

create table temp  as select distinct *  from tablename;

drop table tablename ;  

create table tablename as select distinct * from temp;

drop table temp ;

注意:出现问题的可能原因是表设计不周产生的,增加唯一索引列即可解决。

2、对于第二种重复,通常要求保留重复记录中的第一条记录,操作方法如下:

 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

delete from tablename t1 where t1.ROWID > (select MIN(t2.ROWID) from tablename where t2.Name = t1.Name and t2.Address = t1.Address );

注意:Mysql和SQL Server没有提供rowid机制,所以需要通过一个autoID列来实现行的唯一性,而利用Oracle的rowid处理就方便多了。而且也因为使用了ROWID,这也是最高效的删除重复记录方法。

有更好的方法请指导!


 

 

 

  评论这张
 
阅读(350)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017