ORACLE查询删除重复记录三种方法

时间:2022-01-21 22:12:39

本文列举了3种删除重复记录的方法,分别是rowid、group by和distinct,小伙伴们可以参考一下。

1.用rowid方法

在ORACLE数据库的内部,每一表都有一rowid伪列,行标识惟一标识行,提供对特殊行的快速存取。对该列使用最大(max)或者最小(min)函数可以非常容易地确定重复的行。

据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:

查数据:

select * from table1 a where rowid !=(select max(rowid)
from table1 b where a.name1=b.name1 and a.name2=b.name2......)

删数据:

delete  from table1 a where rowid !=(select max(rowid)
from table1 b where a.name1=b.name1 and a.name2=b.name2......)

 

2.用group by方法

利用分组函数查找表中的重复行:按照某个字段分组,找出行数大于1的列,即由重复记录

利用select 语句中的分组函数GROUP BY/HAVING可以很容易确定重复的行。假设需要创建惟一索引的列为num

对num用group by分组统计并返回每组的个数,如果组中记录数超过1个就存在重复的行。命令如下

查数据:

select count(num), max(name) from student --列出重复的记录数,并列出他的name属性
group by num
having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次

删数据:

delete from student
group by num
having count(num) >1

这样的话就把所有重复的都删除了。

 这种查询方式简便、快捷,是ORACLE数据库中最常用的一种方法。

 

3.用distinct方法 -对于小的表比较有用

create table table_new as   select distinct *   from table1 minux
truncate table table1;
insert into table1 select * from table_new;