我们有一个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中执行该操作的方法
答案 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
)
干杯!