注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

石蕴玉而山辉,水怀珠而川媚!

 
 
 

日志

 
 

SQL语句:查找非重复纪录  

2011-07-14 14:58:49|  分类: 数据库入门 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

由于设计需要,需要查询不重复的记录值,同类问题,想必大家都遇到过,于是乎马上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)打开不重复任意次数的所有记录

  评论这张
 
阅读(1211)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017