Oracle DB如何删除除一个以外的所有重复项
Oracle DB how to delete all duplicates but one
我们有一个 Oracle 数据库 table 有 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 中执行此操作的方法
使用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
)
干杯!!
我们有一个 Oracle 数据库 table 有 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 中执行此操作的方法
使用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
)
干杯!!