请教快速删除重复数据
请教快速删除重复数据
我有一个表 数据很
多 大概几十万条 有部分重复
现在需要按照 其中2个字段的不重复f_name,f_add来保留唯一数据
如
f_id,f_name,f_add,f_work,f_age
1,a,b,c,d
2,a,b,d,e
3,a,c,d,e
那么需要得到
1,a,b,c,d
3,a,c,d,e
请教如何实现
一条SQL语句
不要用临时表
------解决方案--------------------select * from f
where not exist
(select 1 from f f1 where f1.f_id <f.f_id and f1.f_name=f.f_name and f1.f_add=f.f_add)
------解决方案--------------------delete t
where exists(select 1 from t a where t.f_add=a.f_add and t.f_name=a.f_name and t.id> a.id )
------解决方案--------------------declare @t table(f_id int,f_name varchar(10),f_add varchar(10),f_work varchar(10),f_age varchar(10))
insert @t
select 1, 'a ', 'b ', 'c ', 'd ' union all
select 2, 'a ', 'b ', 'd ', 'e ' union all
select 3, 'a ', 'b ', 'd ', 'e '
----查询同名中f_id最大的行
select * from @t as a where not exists(select 1 from @t where
f_name = a.f_name and f_add = a.f_add and f_work = a.f_work
and f_age = a.f_age and f_id > a.f_id)
----删除同名行,只保留f_id最大的行
delete a from @t as a where exists(select 1 from @t where
f_name = a.f_name and f_add = a.f_add and f_work = a.f_work
and f_age = a.f_age and f_id > a.f_id)
----查看删除后的效果
select * from @t
/*结果
1,a,b,c,d
3,a,c,d,e
*/