使用rowid从oracle数据库中删除重复的行?

时间:2011-08-30 07:08:04

标签: sql oracle sql-delete

我正在使用以下查询从表中删除重复的行。表中只有2列(col1和col2)。

delete from tab1 where rowid not in
(select min(rowid) from tab1 t group by col1, col2);

如果我使用此查询删除重复的行,是否有任何问题,如一些副作用?

2 个答案:

答案 0 :(得分:2)

据我所知,您的查询将执行缓慢的

这应该会给你带来更好的表现

delete t1
from tab1 t1
join tab1 t2
on t1.rowid > t2.rowid 
and t1.col1 = t2.col1 
and t1.col2 = t2.col2

或者这个(它适用于mssql,我相信oracle具有相同的语法)

;WITH [CTE DUPLICATE] AS 
(
SELECT 
  ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY id) RN
FROM tab1
)
DELETE FROM [CTE DUPLICATE] WHERE RN > 1

答案 1 :(得分:0)

这个查询没问题。如本问题所述,您可以在没有rownum的情况下对其进行短语:

Oracle Delete Rows Matching On Multiple Values