Oracle DB如何删除除一个以外的所有重复项

时间:2019-12-20 13:01:42

标签: oracle duplicates sql-delete

我们有一个Oracle数据库,其中的表具有n个重复的记录,如下所示:

select * from benefit_allowed_tiers:

ben_tier_id   ben_id  ben_tier_alowed   name
1202932929    33817   1202932929        £10,000
1202932934    33817   1202932934        £30,000
1202932931    33817   1202932931        £20,000
1202932925    33817   1202932925        Not selected
1202932931    33817   1202932931        £20,000 
1202932929    33817   1202932929        £10,000 
1202932934    33817   1202932934        £30,000 
1202932925    33817   1202932925        Not selected
    ... (sometimes there may be more than 2 duplicates)

除了这些重复记录之一,我需要删除所有记录。如何实现?

关于如何在其他数据库中执行此操作,有很多信息,但是我没有找到在Oracle中执行该操作的方法

1 个答案:

答案 0 :(得分:1)

使用exist如下:

Delete from benefit_allowed_tiers t
Where exists ( select 1 from benefit_allowed_tiers t1
Where t1.rowid > t.rowid
And t1.ben_tier_id = t.ben_tier_id
And t1.ben_id = t.ben_id
And t1.ben_tier_alowed = t.ben_tier_alowed
And t1.name = t.name);

或使用analytical function如下:

Delete from benefit_allowed_tiers
Where rowid in
(Select rid from
  (Select t.rowid rid, 
          row_number() over (partition by ben_tier_id, ben_id, ben_tier_alowed, name order by 1) as rn
     From benefit_allowed_tiers t
  )
Where rn > 1
)

干杯!

相关问题