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

在Oracle数据库中,你可以使用以下步骤删除表中多余的重复记录,只留下基于某个字段(例如Id)重复的最小rowid记录:

首先,你需要确定哪个字段或哪些字段用于确定重复记录。在这个例子中,我们将使用Id字段。
创建一个临时表来保存唯一记录的Id和rowid。
从原表中复制所有不重复的记录到临时表。
删除原表中的记录,然后将临时表中的记录复制回原表。

以下是SQL脚本的示例:

– Step 1: 创建临时表
CREATE TABLE temp_table AS
SELECT DISTINCT Id, rowid AS min_rowid
FROM your_table;

– Step 2: 将不重复的记录从原表复制到临时表
INSERT INTO temp_table (Id, rowid)
SELECT Id, MIN(rowid) OVER (PARTITION BY Id) AS min_rowid
FROM your_table;

– Step 3: 删除原表中的记录,然后将临时表中的记录复制回原表
DELETE FROM your_table;
INSERT INTO your_table (Id, rowid)
SELECT Id, min_rowid
FROM temp_table;

– Step 4: 删除临时表
DROP TABLE temp_table;

请注意,上述脚本中的your_table应替换为你的实际表名。这个脚本将删除基于Id字段的所有重复记录,只留下具有最小rowid的记录。在执行这些操作之前,请确保备份你的数据,以防止意外删除或损坏。

如果希望一个sql搞定这个事情的话可以参考下面的语句
DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 18:10:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 18:10:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 18:10:01       82 阅读
  4. Python语言-面向对象

    2024-04-04 18:10:01       91 阅读

热门阅读

  1. Electron无边框自定义窗口拖动

    2024-04-04 18:10:01       34 阅读
  2. WebSocket 对于手游的意义

    2024-04-04 18:10:01       44 阅读
  3. 代码随想录算法训练营第三十六天|leetcode416题

    2024-04-04 18:10:01       40 阅读
  4. MYSQL

    MYSQL

    2024-04-04 18:10:01      26 阅读
  5. 给23年自己的一封信(一点学习心得)

    2024-04-04 18:10:01       40 阅读
  6. C语言 06 无符号数

    2024-04-04 18:10:01       32 阅读
  7. 数据结构之二叉树和平衡二叉树

    2024-04-04 18:10:01       29 阅读
  8. 【机器学习理论】2023 Spring Homework 2 Solution

    2024-04-04 18:10:01       27 阅读