因为设计须要,须要查询不重复的记录值,同类问题,想必你们都遇到过,因而乎立刻GOOGLE一下,发现此类问题还挺多,解决方案也很多,仔细看看。
例若有以下表结构和值
table
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
5 a 男
6 b 男
方案一:distinct
select distinct name from table
获得结果:
name
a
b
c
d
实现效果,那若是要同时打开其它记录呢?再试试
select distinct name,id from table
测试没什么效果,查下得知,这样实际是要name和id字段都重复才被筛选。继续查找可得以下方法:
方案二:group by
select *, count(distinct name) from table group by name
Oracle下测试失败,听说MYSQL下经过,无论,继续思考....
翻翻书,试试
select min(fid),name,sex from table group by name
成功,现实以下结果:
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
继续思考,若是要打开全部记录,不指定字段用(*),貌似这方法就不行了!
select * from table where fid in(Select min(fid) FROM table group by name)
测试成功
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
方案三:
原本已经完了,忽然想起前几天在网上查了查询数据中全部某字段重复的记录
select * from table where name in(select name from table group by name having count(name)=2)
获得以下结果:
fid name sex
1 a 男
2 b 男
5 a 男
6 b 男
以此类推:
select * from table where name in(select name from table group by name having count(name)=1)
按道理说没问题,你们试试~~
再多的字段都所有现实。哎,原来如此简单!回顾网上方法distinct,Inner Join等等,麻烦,并且有很大局限性.
总结以下:
select distinct name from table打开重复记录的单个字段
select * from table where fid in(Select min(fid) FROM table group by name)打开重复记录的全部字段值
select * from table where name in(select name from table group by name having count(name)=1)打开重复任意次数的全部记录web