怎么删除SQL表中的重复数据

我在一个表中有很多重复数据。 请问怎么把重复的数据保留一条其他的删除掉。 当然没有重复的就不用删。除。
 方法一:
select distinct * into #temp  from 原表//distinct是用来区分有没重复记录的
delete 原表
insert 原表 select * from #temp
drop table #temp//是把原表中的数据插入到临时表中,如果原表中有重复的话就只插一个
方法二:
select distinct a,b,c,d...... into #tbl2 from tbl1
truncate table tbl1
insert into tbl1  select * from #tbl2
方法三:
这个问题比较老了,可以这样:
1,如果是对于个别字段:
SELECT * from t,
    (select m,n from t b group by m,n having count(*)>1) t1
where  t.m=t1.m and t.n=t1.n
2,对于所有字段:
--转移不重复的数据到临时表
select distinct * into #tmp from tb
/*
删除原表所有数据,个人认为,此处用truncate table ,而不用drop table,原因是如果用drop table之后,在重新创建该表时,得到的表中的有关字段的一些信息可能会和以前的不一样。
*/
truncate table tb
--插入不重复数据到原表
insert tb select * from #tmp
--删除临时表
drop table #tmp
方法四:
--怎么同时还有2个人问这样的问题,我就直接贴过来啦,哈......
可以不用语句
假设原来的表为TableA,Col1重复则为重复,需要保留一笔即可
建立一张具有和TableA相同结构的表myTableA,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是Col1,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到表myTableA,
此时SQL Server会返回如下提示:
  服务器: 消息 3604,级别 16,状态 1,行 1
  已忽略重复的键。
  它表明在表myTableA中不会有重复的行出现。

然后将原表TableA清空,并将临时表myTableA中数据导入,最后删除临时表myTableA。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的Col1,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!

该方法的好处是,速度非常快,尤其是数据多的时候,用distinct,或者identity的速度很慢,这个方法倒是出了大量的数据,速度方面表现不错
方法五:
delete from table1
group by 主键1,主键2,...
having count(*)>1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值