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)

相关推荐
寂寞旅行3 小时前
向量数据库Milvus的使用
数据库·milvus
闻哥3 小时前
Redis事务详解
java·数据库·spring boot·redis·缓存·面试
道亦无名4 小时前
aiPbMgrSendAck
java·网络·数据库
ID_180079054734 小时前
Python爬取京东商品库存数据与价格监控
jvm·python·oracle
面向对象World6 小时前
正点原子Mini Linux 4.3寸800x480触摸屏gt115x驱动
linux·服务器·数据库
dinga198510267 小时前
mysql之联合索引
数据库·mysql
微风中的麦穗7 小时前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
大数据·数据库·sqlserver·云计算·个人开发·运维必备·sqlserver2019
Leon-Ning Liu8 小时前
PDB未按预期时间执行自动统计信息收集问题分析
oracle
zjttsh8 小时前
MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解
android·数据库·mysql
顾北128 小时前
SpringCloud 系列 04:Gateway 断言 / 过滤器 / 限流 一站式落地指南
java·开发语言·数据库