Oracle 删除重复数据并只保留一条记录
Oracle数据库删除重复数据的方法包括:1)使用ROWID子查询删除非最小ROWID记录;2)利用ROW_NUMBER()标记并删除重复行;3)通过创建临时表保留唯一数据后再导回。建议操作前备份数据,大表优先选择临时表法,注意处理表约束问题。
·
在 Oracle 数据库中删除重复数据并只保留一条记录,有几种常见方法:
方法一:使用 ROWID 和子查询
DELETE FROM 表名
WHERE ROWID NOT IN (
SELECT MIN(ROWID)
FROM 表名
GROUP BY 列1, 列2, 列3 -- 指定判断重复的列
);
方法二:使用 ROW_NUMBER() 分析函数
DELETE FROM 表名
WHERE ROWID IN (
SELECT ROWID FROM (
SELECT ROWID,
ROW_NUMBER() OVER (PARTITION BY 列1, 列2, 列3 ORDER BY ROWID) AS rn
FROM 表名
) WHERE rn > 1
);
方法三:创建临时表
-- 1. 创建临时表存储不重复数据
CREATE TABLE 临时表 AS
SELECT * FROM (
SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY 列1, 列2, 列3 ORDER BY ROWID) AS rn
FROM 原表 t
) WHERE rn = 1;
-- 2. 清空原表
TRUNCATE TABLE 原表;
-- 3. 将临时表数据插回原表
INSERT INTO 原表 SELECT * FROM 临时表;
-- 4. 删除临时表
DROP TABLE 临时表;
注意事项
-
在执行删除操作前,建议先备份数据
-
替换上述 SQL 中的"表名"、"列1,列2,列3"为实际的表名和列名
-
对于大表,方法三(临时表)通常性能更好
-
如果表有主键或唯一约束,可能需要先禁用约束
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)