在实际的开发过程中,我们经常会碰到数据库中某字段有重复数据的情况,比如有一个员工表,员工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。