用SQL语句删除重复记录的四种方法

时间:2011-05-03 09:25:00 

问题:如何把具有相同字段的记录删除,只留下一条。   例如:表test里有id,name字段,如果有name相同的记录只留下一条,其余的删除。name的内容不定,相同的记录数不定。   用SQL语句删除重复记录的四种方法:


方法1:   1、将重复的记录记入temp1表  


select [标志字段id],count(*) into temp1 from [表名]group by [标志字段id]having count(*)>12、将不重复的记录记入temp1表  


insert temp1select [标志字段id],count(*) from [表名]group by [标志字段id]having count(*)=1  3、作一个包含所有不重复记录的表  


select * into temp2 from [表名]where 标志字段id in(select 标志字段id from temp1)  4、删除重复表:delete [表名]   5、恢复表


insert [表名]select * from temp2

6、删除临时表


drop table temp1drop table temp2  方法2:




declare @max integer,@id integer
declare cur_rows cursor local for
select id,count(*) from 表名 group by id having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where id = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

注:set rowcount @max - 1表示当前缓冲区只容纳@max-1条记录,如果有十条重复的,就刪除10条,一定会留一条的。也可以写成delete from 表名。   方法3:  




create table a_dist(id int,name varchar(20))

insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')exec up_distinct 'a_dist','id'select * from a_distcreate procedure up_distinct(@t_name varchar(30)
,@f_key varchar(30))
--f_key表示是分组字段﹐即主键字段
as
begin
declare @max integer,@id varchar(30) ,
@sql varchar(7999) ,@type integer
select @sql = 'declare cur_rows cursor
for select '+@f_key+' ,count(*) from '
+@t_name +' group by ' +@f_key +' having count(*) > 1'
exec(@sql)
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
select @type = xtype from syscolumns
where id=object_id(@t_name) and name=@f_key
if @type=56
select @sql = 'delete from '+@t_name+'
where ' + @f_key+' = '+ @id
if @type=167
select @sql = 'delete from '+@t_name+'
where ' + @f_key+' = '+''''+ @id +''''
exec(@sql)
fetch cur_rows into @id,@max
end
close cur_rows
deallocate cur_rows
set rowcount 0
endselect * from systypes
select * from syscolumns where
id = object_id('a_dist')

方法4:

可以用IGNORE_DUP_KEY:


create table dup (id int identity not null,
name varchar(50)not null)
go
insert into dup(name) values ('abc')
insert into dup(name) values ('abc')
insert into dup(name) values ('abc')
insert into dup(name) values ('abc')
insert into dup(name) values ('abc')
insert into dup(name) values ('abc')
insert into dup(name) values ('abc')
insert into dup(name) values ('cdefg')
insert into dup(name) values ('xyz')
insert into dup(name) values ('xyz')
go
select *
from dup
go
create table tempdb..wk(id int not null,
name varchar(50)not null)
go
create unique index idx_remove_dup
on tempdb..wk(name)
with IGNORE_DUP_KEY
go
INSERT INTO tempdb..wk (id, name)
select id, name
from dup
go
select *
from tempdb..wk
go
delete from dup
go
set identity_insert dup onINSERT INTO dup (id, name)
select id, name
from tempdb..wk
go
set identity_insert dup off
go
select *
from dupgo

  注释:此处delete原表,再加入不重复的值。大家也可以通过join只delete原表中重复的值。

标签:重复记录,sql
0
投稿

猜你喜欢

  • Django中login_required装饰器的深入介绍

    2023-08-22 09:18:28
  • python 时间戳与格式化时间的转化实现代码

    2021-07-06 10:14:47
  • Python协程asyncio模块的演变及高级用法

    2021-05-21 10:50:10
  • Python按照list dict key进行排序过程解析

    2023-12-06 08:19:06
  • SQL Server 使用触发器(trigger)发送电子邮件步骤详解

    2024-01-22 11:15:39
  • Python爬虫实现“盗取”微信好友信息的方法分析

    2023-01-16 09:37:33
  • 表格梳理解析python内置时间模块看完就懂

    2023-10-21 08:10:27
  • python的迭代器与生成器实例详解

    2021-06-21 15:36:41
  • php字符串函数学习之strstr()

    2024-05-11 10:02:07
  • Python爬虫获取数据保存到数据库中的超详细教程(一看就会)

    2024-01-14 13:05:01
  • Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶

    2023-06-03 17:37:26
  • asp正则表达式在网页处理中的应用四则

    2008-02-24 14:44:00
  • python批量更改目录名/文件名的方法

    2022-04-01 11:25:37
  • Go语言空结构体详解

    2024-04-30 10:07:44
  • 浅谈javascript 迭代方法

    2024-06-07 15:50:55
  • Python中xlsx文件转置操作详解(行转列和列转行)

    2022-02-18 03:36:34
  • Vue $emit()不能触发父组件方法的原因及解决

    2024-05-28 16:10:26
  • 典型的三行二列居中高度自适应css布局

    2008-02-22 16:02:00
  • python列表去重的二种方法

    2022-06-02 05:21:41
  • python 特殊属性及方法详细解析

    2023-04-23 10:52:20
  • asp之家 网络编程 m.aspxhome.com