SQL不重复记录

SQL不重复记录

例如有如下表结构和值

table

fidnamesex

1a男

2b男

3c女

4d女

5a男

6b男

方案一:distinct

selectdistinctnamefromtable

得到结果:

name

a

b

c

d

实现效果,那如果要同时打开其它记录呢?再试试

selectdistinctname,idfromtable

测试没什么效果,查下得知,这样实际是要name和id字段都重复才被筛选。继续查找可得如下方法:

方案二:groupby

select*,count(distinctname)fromtablegroupbyname

Oracle下测试失败,据说MYSQL下通过,不管,继续思考....

翻翻书,试试

selectmin(fid),name,sexfromtablegroupbyname

成功,现实如下结果:

fidnamesex

1a男

2b男

3c女

4d女

继续思考,如果要打开所有记录,不指定字段用(*),貌似这方法就不行了!

select*fromtablewherefidin(Selectmin(fid)FROMtablegroupbyname)

测试成功

fidnamesex

1a男

2b男

3c女

4d女

方案三:

本来已经完了,突然想起前几天在网上查了查询数据中所有某字段不重复的记录

select*fromtablewherenamein(selectnamefromtablegroupbynamehavingcount(name)=2)

得到如下结果:

fidnamesex

1a男

2b男

5a男

6b男

以此类推:

select*fromtablewherenamein(selectnamefromtablegroupbynamehavingcount(name)=1)

按道理说没问题,大家试试~~

再多的字段都全部现实。哎,原来如此简单!回顾网上方法distinct,InnerJoin等等,麻烦,而且有很大局限性.

总结如下:

selectdistinctnamefromtable打开不重复记录的单个字段

select*fromtablewherefidin(Selectmin(fid)FROMtablegroupbyname)打开不重复记录的所有字段值

select*fromtablewherenamein(selectnamefromtablegroupbynamehavingcount(name)=1)打开不重复任意次数的所有记录