我们可以用关键字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])