关闭

SQLServer删除重复数据记录

1207人阅读 评论(0) 收藏 举报

*******************************************
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


 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:76551次
    • 积分:1026
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:22篇
    • 译文:0篇
    • 评论:15条
    文章存档
    最新评论