此文章用了四种方法教你如何用SQL语句删除重复记录。
问题:怎样把具有相同字段的纪录删除,只留下一条。 例如:表test里有id,name字段,如果有name相同的记录只留下一条,其余的删除。name的内容不定,相同的记录数不定。
方案1: 1、将重复的记录记入temp1表:
| select [标志字段id],count(*) into temp1 from [表名]group by [标志字段id]having count(*)>1 |
2、将不重复的记录记入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 integerdeclare cur_rows cursor local for select id,count(*) from 表名 group by id having count(*) > 1open cur_rowsfetch cur_rows into @id,@maxwhile @@fetch_status=0beginselect @max = @max -1set rowcount @maxdelete from 表名 where id = @idfetch cur_rows into @id,@maxendclose cur_rowsset rowcount 0 |
注:set rowcount @max - 1 表示当前缓冲区只容纳@max-1条记录﹐如果有十条重复的﹐就刪除 10条,一定会留一条的。也可以写成delete from 表名。
| 【内容导航】 |
| 第1页:一题多解教你SQL语句删除重复记录 | 第2页:方案3: |
| 第3页:方案4 | |
用Oracle动态性能视图采集查询调优数SQL Server企业管理器和查询分析器相关资讯 SQL
- SQL 新手指南 (09/10/2015 10:57:53)
- SQL导入txt以及SQL中的时间格式操 (01/25/2015 11:35:04)
- SQL 事务及实例演示 (08/12/2014 10:36:37)
| - SQL 中的正则函数 (06/28/2015 15:59:48)
- SQL 集合(笔记) (01/15/2015 20:19:06)
- Oracle shell调用SQL操作DB (02/03/2014 10:48:18)
|
本文评论 查看全部评论 (1)