SQLServer2000删除重复数据(总结)转帖

*******************************************
SQLServer2000删除重复数据(总结)
*******************************************
 
一、具有主键的情况
 
I.具有唯一性的字段id(为唯一主键)

 

delete  用户表   
where  id  not  in   

select  max(id)  from  用户表  group  by  col1,col2,col3... 

group  by  子句后跟的字段就是你用来判断重复的条件,如只有col1, 
那么只要col1字段内容相同即表示记录相同。 
 
II.具有联合主键
 
假设col1+','+col2+','...col5  为联合主键

(找出相同记录)

 

select  *  from    用户表  where  col1+','+col2+','...col5  in 

  select  max(col1+','+col2+','...col5)  from  用户表   
  group  by  col1,col2,col3,col4
  having  count(*)>1    

group  by  子句后跟的字段就是你用来判断重复的条件, 
如只有col1,那么只要col1字段内容相同即表示记录相同。 
 
或者:
(找出相同记录)

 

select  *  from  用户表  where  exists  (select  1  from  用户表  x  where  用户表.col1 =  x.col1  and   
用户表.col2=  x.col2  group  by  x.col1,x.col2  having  count(*)  >1) 

 
III:判断所有的字段

 

   select  *  into  #aa  from  用户表  group  by  id1,id2,.... 
   delete  用户表   
   insert  into  用户表 select  *  from  #aa 

 
二、没有主键的情况 
 
I.用临时表实现 

 

select  identity(int,1,1)  as  id,*  into  #temp  from  用户表 
delete  #temp   
where  id  not  in   

   select  max(id)  from  #  group  by  col1,col2,col3... 

delete  用户表  ta 
inset  into  ta(...) select  .....  from  #temp 

 
II.用改变表结构(加一个唯一字段)来实现

 

alter  用户表  add    newfield  int  identity(1,1) 
delete  用户表 
where  newfield  not  in 

select  min(newfield)  from  用户表  group  by  除newfield外的所有字段 

alter  用户表  drop  column  newfield

 

文章出处:http://www.diybl.com/course/7_databases/sql/sqlServer/2007926/73829.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值