Oracle数据库删除多余重复数据
2018-02-23 16:43
274 查看
在Oracle中常常遇到这样的问题,有一张表a,其中存在多条id不同但是信息相同的数据。需求是删除多余的重复数据。
1.准备表 testcreate table test(
id number not null primary key,
day date not null); 2.准备数据insert into test(id, day) values(4, to_date('2006-10-08','yyyy-mm-dd'));
insert into test(id, day) values(5, to_date('2006-10-08','yyyy-mm-dd'));
insert into test(id, day) values(6, to_date('2006-10-10','yyyy-mm-dd'));
insert into test(id, day) values(7, to_date('2006-10-08','yyyy-mm-dd'));
insert into test(id, day) values(8, to_date('2006-10-10','yyyy-mm-dd'));
insert into test(id, day) values(9, to_date('2006-10-11','yyyy-mm-dd'));
insert into test(id, day) values(10, to_date('2006-10-11','yyyy-mm-dd'));
insert into test(id, day) values(11, to_date('2006-10-12','yyyy-mm-dd'));
insert into test(id, day) values(12, to_date('2006-10-12','yyyy-mm-dd')); 下面我们通过最常见的分组函数的方法进行处理这样的问题。
核心是通过Oracle自带的Rowid进行删除操作。(Oracle确实强大,提供了伪列的概念。伪列是在insert操作时给当条数据进行唯一标识。)
废话不多说,上干货:
核心代码:
where a.day in
(select day from test group by day having count(*) > 1) 对当前表进行分组找出重复项。
1.准备表 testcreate table test(
id number not null primary key,
day date not null); 2.准备数据insert into test(id, day) values(4, to_date('2006-10-08','yyyy-mm-dd'));
insert into test(id, day) values(5, to_date('2006-10-08','yyyy-mm-dd'));
insert into test(id, day) values(6, to_date('2006-10-10','yyyy-mm-dd'));
insert into test(id, day) values(7, to_date('2006-10-08','yyyy-mm-dd'));
insert into test(id, day) values(8, to_date('2006-10-10','yyyy-mm-dd'));
insert into test(id, day) values(9, to_date('2006-10-11','yyyy-mm-dd'));
insert into test(id, day) values(10, to_date('2006-10-11','yyyy-mm-dd'));
insert into test(id, day) values(11, to_date('2006-10-12','yyyy-mm-dd'));
insert into test(id, day) values(12, to_date('2006-10-12','yyyy-mm-dd')); 下面我们通过最常见的分组函数的方法进行处理这样的问题。
核心是通过Oracle自带的Rowid进行删除操作。(Oracle确实强大,提供了伪列的概念。伪列是在insert操作时给当条数据进行唯一标识。)
废话不多说,上干货:
delete from test a where a.day in (select day from test group by day having count(*) > 1) and rowid not in (select min(rowid) from test group by day having count(*) > 1)上述是本讲的结果SQL代码,该代码可实现多余重复数据的删除操作。
核心代码:
where a.day in(select day from test group by day having count(*) > 1) 对当前表进行分组找出重复项。
and rowid not in (select min(rowid) from test group by day having count(*) > 1)
找出重复项,在进行重复同时利用伪列rowid显示最小(或最大)的伪列。 通过唯一标识的伪列进行删除操作。
相关文章推荐
- Oracle数据库重复数据删除的三种情况
- Oracle数据库删除表中重复数据
- 如何高效删除Oracle数据库中的重复数据
- mysql 删除重复多余的数据
- oracle删除重复的多余数据最快最有效的方法
- 高效删除Oracle数据库中重复数据的方法 .
- Oracle数据库重复数据删除的三种情况
- Oracle数据库重复数据删除的三种情况
- Oracle数据库中重复数据删除方法:部分去重+完全去重
- oracle数据库删除重复数据
- 删除Mysql数据表中多余的重复记录的sql语句
- 如何高效删除Oracle数据库中的重复数据
- oracle数据库中的重复数据的删除
- 删除Oracle数据库中重复的没用数据
- 如何高效删除Oracle数据库中的重复数据
- oracle查询重复数据并删除掉多余部分
- 高效删除Oracle数据库中重复数据的方法
- 高效删除Oracle数据库中重复数据,并保留最新一条的方法
- Oracle数据库重复数据删除的三种情况
- Oracle数据库重复数据删除的三种情况收藏