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)

相关推荐
哆哆啦007 分钟前
使用 Obsidian + GitHub Actions + GitHub Pages 搭建内容发布流
数据库·笔记·github·obsidian
duke86926721410 分钟前
PostgreSQL 中高效插入多对多关联数据的三种方案对比与最佳实践
jvm·数据库·python
迷枫71214 分钟前
达梦数据库备份还原:物理备份、逻辑备份
数据库
czlczl2002092518 分钟前
mysql表复制方案
数据库·mysql
m0_4636722027 分钟前
mysql数据库如何进行逻辑备份与物理备份对比_优缺点分析
jvm·数据库·python
2401_8676239831 分钟前
SQL如何进行分组后字符串拼接_使用GROUP_CONCAT或STRING_AGG
jvm·数据库·python
jnrjian33 分钟前
expdp file 带时间戳 date
oracle
kexnjdcncnxjs34 分钟前
MySQL触发器无法触发的原因分析_MySQL触发器排查指南
jvm·数据库·python
六月雨滴1 小时前
存储性能监控与优化及最佳实践总结
数据库·oracle·dba
我先去打把游戏先1 小时前
【保姆级图文教程】:VMware虚拟机安装Ubuntu Server 22.04
linux·数据库·ubuntu