博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle删除重复数据
阅读量:5169 次
发布时间:2019-06-13

本文共 1140 字,大约阅读时间需要 3 分钟。

Oracle维护中常遇到重复数据的问题,以下是遇到大量重复数据应对方法。

 

1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断

select * from 表名 where Id in (select Id from 表名 group byId having count(Id) > 1)

 

2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

DELETE from 表名 WHERE (判断字段) IN ( SELECT 判断字段 FROM  表名 GROUP BY 判断字段 HAVING COUNT(判断字段) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM   表名 GROUP BY id HAVING COUNT(*) > 1);

注意:AND后面的句子获取到的是除去拥有rowid最小的所有的记录(单个不重复记录也包含),Where 与 AND之间是获取所有含有重复记录的字段。

 

3、查找表中多余的重复记录(多个字段)

select * from  表名 a where (a.Id,a.seq) in(select Id,seq from   表名 group by Id,seq having count(*) > 1)

 

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录(原理同2)

delete from 表名  a where (a.Id,a.seq) in (select Id,seq from  表名  group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from  表名  group by Id,seq having count(*)>1)

示例二:delete from student where s_id not in(select min(s_id) from student group by s_name,c_id);

 

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

select * from   表名  a where (a.Id,a.seq) in (select Id,seq from   表名   group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from   表名   group by Id,seq having count(*)>1)

转载于:https://www.cnblogs.com/lxd1024/p/10565360.html

你可能感兴趣的文章
Application Pool Identities
查看>>
2017-3-24 开通博客园
查看>>
【MySQL性能优化】MySQL常见SQL错误用法
查看>>
Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
查看>>
Struts 2 常用技术
查看>>
树形DP
查看>>
python flask解决上传下载的问题
查看>>
语法测试
查看>>
CES1
查看>>
CES2
查看>>
文件方式实现完整的英文词频统计实例
查看>>
ListControl的用法
查看>>
单个SWF文件loading加载详解(转)
查看>>
SQLServer中的CTE通用表表达式
查看>>
linux第1天 fork exec 守护进程
查看>>
Ajax原理学习
查看>>
最新最潮的24段魔尺立体几何玩法(2016版)
查看>>
C# 3.0 LINQ的准备工作
查看>>
CodeForces - 449D Jzzhu and Numbers
查看>>
mysql批量插入更新操作
查看>>