SQL选择不重复记录
2010-12-14 10:18
197 查看
由于设计需要,需要查询不重复的记录值,同类问题,想必大家都遇到过,于是乎马上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 nameOracle下测试失败,据说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)打开不重复任意次数的所有记录
转自:http://blog.sina.com.cn/s/blog_4581d9820100bg9x.html
例如有如下表结构和值
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 nameOracle下测试失败,据说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)打开不重复任意次数的所有记录
转自:http://blog.sina.com.cn/s/blog_4581d9820100bg9x.html
相关文章推荐
- 在SQL中删除重复记录(多种方法) 选择自 55015182 的 Blog
- 在SQL中删除重复记录(多种方法) 选择自 55015182 的 Blog
- SQL选择不重复记录
- T-SQL无重复选择记录
- oracle 当查询结果有重复记录时 选择时间最近的一条
- 如何去除SQL中的重复记录
- 【转】Sql去除重复记录
- 通过SQL语句实现记录的重复次数排序
- 用SQL删除重复记录的N种方法
- 查询及删除重复记录的SQL语句
- sql查询选择表中从10到15的记录
- SQL Server中快速删除重复记录(转东转西)
- SQL查找和删除重复记录
- 如何去除SQL中的重复记录(加班工作中的知识点回顾)
- 排序+“选择不重复记录”(2)——每组的最小值记录
- 查询重复记录的SQL语句
- SQL语句删除重复的记录的方法
- SQL 处理表重复记录(查询和删除)
- 删除数据库中重复记录的SQL语句
- SQL查询或删除重复记录