发布时间: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)