Oracle数据库删除多余重复数据
程序员文章站
2022-06-02 16:49:20
...
在Oracle中常常遇到这样的问题,有一张表a,其中存在多条id不同但是信息相同的数据。需求是删除多余的重复数据。
1.准备表 test
create 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 数据库表被锁解决方案
下一篇: 返回数据库的表自增主键值
推荐阅读
-
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
-
使用工具 plsqldev将Excel导入Oracle数据库
-
快速查出Oracle数据库中锁等待的方法
-
DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)
-
Python操作Oracle数据库的简单方法和封装类实例
-
Python使用cx_Oracle模块操作Oracle数据库详解
-
编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
-
编程开发之--Oracle数据库--存储过程和存储函数(2)
-
ORACLE数据库查看执行计划的方法
-
ORACLE数据库事务隔离级别介绍