我有一个Oracle数据库,其中有一个表,让我们说“光环”
现在在此表中有不同的重复记录。我必须删除这些重复项。
如上图 Dsvsd , Cvra ,单一条目& 双重录入
删除重复项的逻辑是,最高(最大)Review_ID
&如果记录没有重复项,例如单一条目,请保留它。现在我无法手动执行此任务,因为该表的记录数为84,000,并且有18,000个不同的记录。 如何使用查询?或此任务的最佳方法是什么
这是预期的结果
答案 0 :(得分:2)
以下是一种使用rowid
和row_number
排名功能删除重复项的方法:
delete from auro
where rowid in
( select rwid
from ( select rowid rwid,
row_number() over ( partition by name
order by review_id desc) rn
from auro
) t
where rn>1
)
答案 1 :(得分:1)
delete from aura where id not in (
select min(id) keep (dense_rank last order by review_id nulls first)
from aura
group by name
)
答案 2 :(得分:-1)
在你的代码中尝试这个(请忽略语法错误,因为我是sql中的菜鸟)
选择名称AS n FROM auro HAVING count(name)> 1
开始
LOOP
SELECT MAX(review_id),MIN(review_id)AS maxid,minid FROM auro HAVING name = n
删除来自auro
名称= n;
当maxid = minid时退出;
结束循环;
END;
答案 3 :(得分:-1)
在你的代码中尝试这个(请忽略语法错误,因为我是sql中的菜鸟)SELECT name AS n FROM auro HAVING count(name)> 1 BEGIN LOOP SELECT MAX(review_id),MIN(review_id)AS maxid,minid FROM auro HAVING name = n DELETE FROM auro WHERE name = n;当maxid = minid时退出;结束循环; END