Chinaunix首页 | 论坛 | 博客
  • 博客访问: 165269
  • 博文数量: 26
  • 博客积分: 1225
  • 博客等级: 中尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-06 21:11
文章分类

全部博文(26)

文章存档

2018年(2)

2014年(1)

2011年(3)

2010年(2)

2009年(1)

2008年(17)

我的朋友

分类: 数据库开发技术

2008-10-15 16:23:37

1。如果有ID字段,就是具有唯一性的字段  
   
  delect   table   where   id   not   in   (  
   
      select   max(id)   from   table   group   by   col1,col2,col3...  
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。  
   
   
   
  2,如果是判断所有字段也可以这样  
      select   *   into   #aa   from   table   group   by   id1,id2,....  
      delete   table    
      insert   into   table    
      select   *   from   #aa  
   
   
   
  3,没有ID的情况  
   
  select   identity(int,1,1)   as   id,*   into   #temp   from   tabel  
  delect   #   where   id   not   in   (  
      select   max(id)   from   #   group   by   col1,col2,col3...)  
  delect   table  
  inset   into   table(...)  
        select   .....   from   #temp   
    
    
4.  col1+','+col2+','...col5   联合主键  
   
   
  select   *   from     table   where   col1+','+col2+','...col5   in   (  
   
      select   max(col1+','+col2+','...col5)   from   table    
  where   having   count(*)>1  
  group   by   col1,col2,col3,col4    
  )  
  group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。   
    
  5   
  select   identity(int,1,1)   as   id,*   into   #temp   from   tabel  
  select   *   from     #temp   where   id   in   (  
      select   max(id)   from   #emp   where   having   count(*)>1   group   by   col1,col2,col3...)  

6.
select   distinct   *   into   #temp   from   tablename    
  delete   tablename    
  go  
  insert   tablename   select   *   from   #temp  
  go  
  drop   table   #temp  
 
 
无ID方法:
alter table aa add id1 int identity(1,1)

delete from aa where id1 in
(select max(id1) from aa group by a having count(a)>1)

alter talbe aa drop columm id1
 
 

 

/*
删除表中重复行的方法
*/

if exists(select 1 from sys.tables where name='t_dup')
    
drop table t_dup
go
create table t_dup(id int,age int,name varchar(32))
insert into t_dup
select 1,1,'a'
union all select 1,1,'a'
union all select 1,1,'a'
union all select 1,2,'a'
union all select 1,2,'e'
union all select 2,3,'b'
union all select 3,3,'d'
go
select * from t_dup
go
with t_all as
    (
select id,age,name,row_number() over(order by id) [num]
     
from t_dup),
    t_max 
as
    (
select id,age,name,max(num) num
     
from t_all
     
group by id,age,name)
select id,name,age from t_all a where exists(select 1 from t_max where num=a.num)


 

 

阅读(1605) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~