我正在使用以下查询从表中删除重复的行。表中只有2列(col1和col2)。
delete from tab1 where rowid not in
(select min(rowid) from tab1 t group by col1, col2);
如果我使用此查询删除重复的行,是否有任何问题,如一些副作用?
答案 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的情况下对其进行短语: