在 Oracle 数据库中,有几种常用的方法来去除重复数据。以下是几种主要方法:
最简单的去重方法是使用 DISTINCT 关键字:
SELECT DISTINCT column1, column2, ...
FROM table_name;
这会返回指定列的唯一组合。
SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...;
如果要物理删除表中的重复记录,可以:
DELETE FROM table_name
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM table_name
GROUP BY column1, column2, ...
);
-- 查询去重结果
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
);
-- 创建临时表存储唯一数据
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;
选择哪种方法取决于您的具体需求、表的大小以及是否需要物理删除重复数据。