插件窝 干货文章 oracle怎么去除重复

oracle怎么去除重复

table column SELECT 数据 129    来源:    2025-04-29

Oracle 数据库去除重复数据的方法

在 Oracle 数据库中,有几种常用的方法来去除重复数据。以下是几种主要方法:

1. 使用 DISTINCT 关键字

最简单的去重方法是使用 DISTINCT 关键字:

SELECT DISTINCT column1, column2, ...
FROM table_name;

这会返回指定列的唯一组合。

2. 使用 GROUP BY 子句

SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...;

3. 使用 ROWID 删除重复行(保留一行)

如果要物理删除表中的重复记录,可以:

DELETE FROM table_name
WHERE rowid NOT IN (
    SELECT MIN(rowid)
    FROM table_name
    GROUP BY column1, column2, ...
);

4. 使用 ROW_NUMBER() 分析函数

-- 查询去重结果
SELECT * FROM (
    SELECT t.*,
           ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY rowid) AS rn
    FROM table_name t
)
WHERE rn = 1;

-- 删除重复数据
DELETE FROM table_name
WHERE rowid IN (
    SELECT rowid FROM (
        SELECT rowid,
               ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY rowid) AS rn
        FROM table_name
    )
    WHERE rn > 1
);

5. 使用临时表方法

-- 创建临时表存储唯一数据
CREATE TABLE temp_table AS
SELECT DISTINCT * FROM original_table;

-- 清空原表
TRUNCATE TABLE original_table;

-- 将唯一数据插回原表
INSERT INTO original_table
SELECT * FROM temp_table;

-- 删除临时表
DROP TABLE temp_table;

注意事项

  1. 对于大型表,删除操作可能会很耗时,建议在非高峰期执行
  2. 执行删除操作前最好先备份数据
  3. 可以根据业务需求决定保留哪一行重复数据(如保留最新或最早的记录)

选择哪种方法取决于您的具体需求、表的大小以及是否需要物理删除重复数据。