oracle删除表中多余的重复记录(多个字段),只留有rowid最小的记录

在Oracle数据库中,你可以使用以下步骤来删除表中多余的重复记录,只留下rowid最小的记录:

首先,确保你已经备份了你的数据,以防万一发生错误。

使用以下查询来找出重复的记录:

SELECT column1, column2, ..., ROWID

FROM your_table

GROUP BY column1, column2, ...

HAVING COUNT(*) > 1;

这将返回所有重复的记录,以及它们的rowid。

  1. 创建一个临时表来保存你想要保留的记录。假设你想要保留每个重复组中rowid最小的记录,你可以执行以下操作:

CREATE TABLE temp_table AS

SELECT column1, column2, ..., MIN(ROWID) AS min_rowid

FROM your_table

GROUP BY column1, column2, ...;

这将创建一个临时表,其中包含你想要保留的记录以及它们的最小rowid。

  1. 删除重复的记录。你可以使用以下查询来删除所有不在临时表中的记录:

DELETE FROM your_table

WHERE ROWID NOT IN (SELECT min_rowid FROM temp_table);

这将删除所有重复的记录,只留下每个重复组中rowid最小的记录。

  1. 最后,你可以选择删除临时表,或者将其保留以备后用。

请注意,在执行这些操作之前,确保你已经备份了你的数据,以防万一发生错误。此外,这些操作可能需要一些时间来执行,具体取决于表的大小和数据的复杂性。

简单的一句SQL:

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)

相关推荐
赵渝强老师1 分钟前
【赵渝强老师】崖山数据库的联机重做日志文件
数据库·国产数据库·yashandb·崖山数据库
家有娇妻张兔兔12 分钟前
Redis 报错 “MISCONF Redis is configured to save RDB snapshots“?一文讲透根因与根除方案
数据库·redis·故障排查·misconf
迷迭香yy14 分钟前
回测过拟合检测体系从样本内外到组合稳健性评估 IG50免费开源股票数据API接口
服务器·开发语言·数据库·人工智能·python
薛晓刚1 小时前
国产化深水区:正在被重构的DBA价值与第三方服务格局
oracle·重构·dba
敲上瘾2 小时前
Redis持久化存储机制:从RDB到AOF再到混合持久化的配置与实践
linux·数据库·redis·缓存
2401_894915535 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
正儿八经的少年10 小时前
布隆过滤器(解决redis缓存穿透步骤之一)
数据库·redis·缓存
xrandzj10 小时前
MySQL8.0 从零通关核心操作手册(Ubuntu实战版)
数据库·mysql
我不会插花弄玉11 小时前
4.数据类型【由浅入深-MySQL】
数据库·mysql
denggun1234511 小时前
yield
前端·数据库·python