暂无图片
Oracle如何删除大表的重复记录
我来答
分享
刘广
2021-12-01
Oracle如何删除大表的重复记录
暂无图片 5M

场景:假设有一张表EMP,表数据量有两千万,ID和NAME都有唯一索引

需求:找出表中的重复数据,并删除重复的数据,但是要保留时间最新的那一条记录,表结构如下:



比如,上表中SCOTT的ID和NAME都重复了,我想删除重复的行,但是我要保留最新的记录,最新的记录即2021/10/30 18:00:00分的,请问大家有什么好的办法?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
DarkAthena

这个当然是用开窗函数结合rowid定位记录更快,这样就只要根据rowid删数据就好了。

create table temp_rd as

select rd from (

select rowid rd,row_number() over(partition by id,name order by updatetime desc) rn from emp ) where rn=1;

delete emp a where not exists (select 1 from temp_rd b where a.rowid=b.rd);


两千万对oracle来说真不算大表,而且你那唯一索引怕不是失效了吧,如果是有效的唯一索引,是不会出现重复记录的

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
刘广
题主
2021-12-02
谢谢专家,我用的也是这个方案
薛晓刚

1、请问你都是唯一索引的约束,这种是怎么出来的?理论上不应该啊

2、select id,name,max(updatetime) from t  group  by   id,name 这是找出最新的。如果是最旧的就是min

3、然后你再嵌套一层获得到id,进行删除或者是迁移到一个新表。

暂无图片 评论
暂无图片 有用 0
打赏 0
刘广
题主
2021-12-02
谢谢
Thomas

可参考我写的这篇:https://www.modb.pro/db/162057

暂无图片 评论
暂无图片 有用 0
打赏 0
刘广
题主
2021-12-02
谢谢
zhuzhijiao

利用 rowid 查询/ 删除表中重复行。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle安装一般是静默安装,还是图形化安装?
回答 6
已采纳
这是个开放性的问题,如果是初学者:个人学习推荐图形化安装,掌握基本的能力;进一步静默安装,掌握每个安装参数选项基本含义;最后编程能力不错的话还可以脚本化安装;对于老手:怎么方便怎么来,没有限制。但是对
Oracle静默安装怎么能看到缺失的依赖包?
回答 2
已采纳
redhat7上,我一般就是这么装依赖包:yumyinstallgccmakebinutilsgccccompatlibstdc33elfutilslibelfdevelelfutilslibelfd
redo log和undo log的区别
回答 6
已采纳
redolog:记录的是物理级别上的页修改操作,比如页号,偏移量,写入的数据,主要是为了保证数据的可靠性。undolog:记录的是逻辑操作日志,比如对某一行数据进行了insert操作,那么undolo
AWR分析报告问题求助:是否有CPU、内存、磁盘I/O硬件性能问题
回答 2
好的
Oracle RMAN 中list能根据时间自动排序吗?
回答 1
已采纳
listbackupsetsummary;
Oracle如何对impdp/expdp 操作做审计?
回答 1
已采纳
参考下这个,看是否复合要求。
Oracle 19c rac 配置共享存储现在都用的是什么?
回答 5
11,19都可以用UDEV及ASMLIB,主推荐UDEV,19现在还可以考虑ASMFD这种更简单的方式。
oracle如何查询数据库正在运行的大事务
回答 1
已采纳
查当前正在运行的事务以及sqlSELECTt.startdate,t.startscn,s.sid,s.serial,s.username,s.program,q.sqltext,q.sqlidFRO
现在学习pg有什么资料吗?
回答 2
已采纳
PostgreSQL修炼之道从小工到专家
请问awr里Executions执行为0,怎么查看原因
回答 1
已采纳
通常是开始执行了,但是没有执行完。可以通过v$sqlmonitor、DBAHISTREPORTS、DBAHISTREPORTSDETAILS查看。如果没达到sqlmonitor阈值,可以通过v$act