Maison  >  Article  >  base de données  >  Oracle 如何快速查找和删除重复记录

Oracle 如何快速查找和删除重复记录

WBOY
WBOYoriginal
2016-06-07 16:55:15989parcourir

今天整理用户系统的人员库,发现有很多人员有重复,需要删除掉这些冗余的人员信息;在网上查了一下,基本上有两种解决办法:在Or

今天整理用户系统的人员库,发现有很多人员有重复,需要删除掉这些冗余的人员信息;在网上查了一下,基本上有两种解决办法:

在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上;

在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。

如果检索出这些重复的记录:

1。select gh,xm from t_rygl_ryxx group by gh,xm having count(*) >1

这条语句可以找出重复记录中所有不重复的记录(呵呵,说起来真别扭)

2。select * from t_rygl_ryxx e1 where rowid not in (select max(rowid) from t_rygl_ryxx e2 where e1.gh=e2.gh)

这条语句可以找出所以重复的记录(包括重复记录中有重复的)。

以上两条语句,第条个语句执行效率非常高;第二条语句执行起来效率就相对慢了很多,但第二条记录很精确,查出来的记录可以直接导出到Excel,可以好好对比一下。我再这里不多说,你可以自己试试,琢磨琢磨。。。

如果找到了不重复的记录,,那删除就很简单了,在这里就不多说了。。。

希望可以帮助遇到此类问题的朋友,也希望大家能多留言交流。

linux

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Linux下MySQL命令Article suivant:MySQL中NOT IN语句对NULL值的处理