欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

热门阅读

在Sql Server中查出重复数据并删除重复数据方法

创建时间:2011年12月26日 15:58  阅读次数:(6900)
分享到:
在实际的开发过程中,我们经常会碰到数据库中某字段有重复数据的情况,比如有一个员工表,员工ID唯一的,但员工姓名不是唯一的,那么如果数据库中存在同名的员工时,我们要如何查询出有重复姓名的数据呢?

先创建一个临时表,只有ID(员工编号)与name(员工名称)两个字段(测试用例,字段越少越清楚^_^)
create table #table
(
ID int primary key identity(1,1),
name varchar(50) not null
)

然后往该表中插入员工姓名,包括两个重复姓名('张三'和'李明')
insert into #table(name) 
select '张三'
union all
select '张三'
union all
select '李明'
union all
select '李明'
union all
select '李四'

接下来我们要如何查询出有重复姓名的'张三'和'李明'呢?利用group by与having条件即可,sql如下:
select name from #table group by name having count(1) >1

查询结果如下:
name
李明
张三

关于group by having与where子句的区别,请查看本站:
Sql Server中where与having的区别

呵呵,正是我们想要的结果。重复的记录是有查询出来了,那么我们要如何删除其中重复的记录,只留下一条数据呢?
删除重复数据只留下一条数据的sql如下:
delete t1 from #table t1,
(select name from #table group by name having count(1) >1) t2 
where t1.name=t2.name 
and t1.id< >(select max(id) from #table t3 where t1.name=t3.name)

执行上面的sql,再来查询结果,结果如下:
ID  name
2   张三
4   李明
5   李四
这就说明,重复的记录已经被删除掉了。最后,删除测试表
drop table #table


在网上看到很多删除重复数据的方法,都有用到了临时表,其实不用,一个简单的sql就可以完成了。希望本例能给大家带来帮助。www.lmwlove.com/ac/ID647" target="_blank" class="content_href">利用DataView快速查询DataTable中不重复的行等,所以,小编建议大家应该好好研究一下DataView。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 99+80=? 的结果(结果是:179)
结  果: