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