【问题标题】:Oracle DB how to delete all duplicates but oneOracle DB如何删除除一个以外的所有重复项
【发布时间】:2020-04-12 23:52:14
【问题描述】:

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

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 中执行此操作的方法

【问题讨论】:

标签: oracle duplicates sql-delete


【解决方案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
)

干杯!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多