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

你可能感兴趣的:(sqlserver2000)