IT技术网www.itjs.cn

当前位置:首页 > 数据库 > MySQL > mysql查询语句中distinct的问题

mysql查询语句中distinct的问题

发布时间:2010-11-25 15:57 来源:未知

mysql查询语句我们都经常在用,今天维护数据库出现以下需求,mysql查询语句查出user表中不重复的记录,使用distinct但他只能对一个字段有效,我试了好多次不行,怎么办呢?

原因就是 distinct它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。

也就是distinct只能返回它的目标字段,而无法返回其它字段

例如:

SELECT   DISTINCT mac,ip from ip  +------+------+  | mac   | ip |  +------+------+  | abc   |   678 |   | abc   |   123 |   | def   |   456 |   | abc   | 12 |   +------+------+  

他还是不会有变换!因为上面的语句产生的作用就是作用了两个字段,也就是必须得mac与ip都相同的才会被排除

最后没有办法,使用group by 看看!!!!

查看mysql 手册!connt(distinct name) 可以配合group by 实现。

一个count函数实现我要的功能。

select *,count(distinct mac) from ip group by mac;  +------+------+---------------------+  | mac   | ip | count(distinct mac) |  +------+------+---------------------+  | abc   |   678 |                1 |   | def   |   456 |                1 |   +------+------+---------------------+  

基本实现我的想法!

那如何实现一个表有两个字段mac和ip,如何找出所有的mac相同而ip不同的记录?

mysql> select * from ip;  +-----+-----+  | mac | ip   |  +-----+-----+  | abc | 123 |  | def | 456 |  | ghi | 245 |  | abc | 678 |  | def | 864 |  | abc | 123 |  | ghi | 245 |  +-----+-----+  7 rows in set (0.00 sec)   mysql> SELECT   DISTINCT a.mac, a.ip  -> FROM ip a, ip b  -> WHERE a.mac = b.mac AND a.ip <> b.ip ORDER BY a.mac;  +-----+-----+  | mac | ip   |  +-----+-----+  | abc | 678 |  | abc | 123 |  | def | 864 |  | def | 456 |  +-----+-----+  4 rows in set (0.00 sec)