您的位置:首页 > 数据库 > Oracle

Oracle 重复数据查询以及删除

2017-02-28 21:15 483 查看
Create table test
(id number(2),
 names varchar2(20));
 insert into test values(1,'张三');
 insert into test values(2,'李四');
 insert into test values(3,'马七');
 select * from test;
 --查找重复数据
select * from test a where (a.id,a.names) in
 (select id,names from test group by id,names having count(*) > 1)
 --删除重复数据,只留rowid最小的那行;
 delete from test a where (a.id,a.names) in
 (select id,names from test group by id,names having count(*) > 1)
  and rowid not in (select min(rowid) from test group by id,names having count(*)>1)
  --查找重复数据,不含rowid最小的行
  select * from test a where (a.id,a.names) in
  (select id,names from test group by id,names having count(*) > 1)
  and rowid not in (select min(rowid) from test group by id,names having count(*)>1)
 
---1.以上是重复数据根据多列来判断

以下是重复数据根据单列来判断

1、首先,查找表中多余的重复记录,重复记录是根据单个字段(id)来判断
 
select * from test where id in(select id from test group by having count(id) >1)
 
2、删除表中多余的重复记录,重复记录是根据单个字段(id)来判断,只留有rowid最小的记录
 
delete from test where (id) in (select id from test group by id having count(id) >1) and rowid not in (select min(rowid) from test group by id having count(*)>1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: