日期:2014-05-17  浏览次数:20414 次

关于数据库去重的方法求助
现有一个表 table
有两个字段 a,b

没有自增主键

现在想把 a,b 重复的数据删除,但是保留一条。

数据在千万级别,求一个高效的方法去重。
数据库

------解决方案--------------------
-------------如果删除的数据量比较大时
With dup as 
(
Select *,ROW_NUMBER() Over(Partition by a,b order by a,b)as rn
From dbo.tb
)
Select a,b
Into dbo.duptmp
From dup
Where rn = 1;
---
drop table tb;
exec sp_rename 'dbo.duptmp','dbo.tb'

当删除的数据比较少时。
------解决方案--------------------
引用:
Quote: 引用:

1、select distinct a,b into #t from tb
2、truncate table tb
3、insert into tb select * from #t


能不能解说下原理? 新手不大懂

第一步先把非重复的插入一个临时表(这个临时表就是你希望保留的数据),然后第二步把原表清空了,第三步把数据插回去原表