程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLServer刪除重復數據記錄

SQLServer刪除重復數據記錄

編輯:關於SqlServer
一、具有主鍵的情況
 
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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved