SQL如何去除数据表中重复的数据

我们可以用关键字Distinct去掉结果集中重复的元素,但是这样并不能删除数据库中重复的元素。
如果想把数据表某个字段重复的数据删除,利用临时表作为中转站是个好方法。
设想我们想把数据表Tb_Blogs中字段BlogUrl有重复值的数据多余的行删掉(有相同的BlogUrl的数据只保留一行),那么我们可以这样做:

select *  into #temp1 from Tb_Blogs where ID in (select Max(ID) from Tb_Blogs group by BlogUrl)

这个语句把没有重复的数据全部保存到临时表#temp1中(注意我这个表中有主键ID,如果没有主键的行那就应该在临时表中建立主键,然后在临时表中再进行去重复行,再建立另外一个临时表来保存没有重复行的数据),然后

drop table tb_blogs

删除表tb_blogs

select * into tb_blogs from #temp1

把临时表没有重复行的数据全部倒回到tb_blogs中
drop table #temp1
删除临时表

当我以为上面的是个好方法时,蜘蛛却让我感到自己瞎折腾了,原来还有更好的方法:

Delete from Tb_Blogs where [ID] Not In (Select Max([ID]) from Tb_Blogs Group by [BlogUrl])

posted on 2009-06-06 20:13  边写边唱  阅读(968)  评论(0编辑  收藏  举报

导航