mysql查询语句中distinct的问题

数据库 MySQL
mysql查询语句我们都非常熟悉了,但是有时会遇到使用distinct查询不重复记录只对第一个字段有效的问题,那么应该如何解决呢?阅读下文,您就可以找到答案。

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

原因就是 distinct它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。
也就是distinct只能返回它的目标字段,而无法返回其它字段
例如:

  1. SELECT   DISTINCT mac,ip from ip  
  2. +------+------+  
  3. | mac   | ip |  
  4. +------+------+  
  5. | abc   |   678 |   
  6. | abc   |   123 |   
  7. | def   |   456 |   
  8. | abc   | 12 |   
  9. +------+------+  

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

***没有办法,使用group by 看看!!!!
查看mysql 手册!connt(distinct name) 可以配合group by 实现。
一个count函数实现我要的功能。

  1. select *,count(distinct mac) from ip group by mac;  
  2. +------+------+---------------------+  
  3. | mac   | ip | count(distinct mac) |  
  4. +------+------+---------------------+  
  5. | abc   |   678 |                1 |   
  6. | def   |   456 |                1 |   
  7. +------+------+---------------------+  

基本实现我的想法!

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

  1. mysql> select * from ip;  
  2. +-----+-----+  
  3. | mac | ip   |  
  4. +-----+-----+  
  5. | abc | 123 |  
  6. | def | 456 |  
  7. | ghi | 245 |  
  8. | abc | 678 |  
  9. | def | 864 |  
  10. | abc | 123 |  
  11. | ghi | 245 |  
  12. +-----+-----+  
  13. 7 rows in set (0.00 sec)  
  14.  
  15. mysql> SELECT   DISTINCT a.mac, a.ip  
  16. -> FROM ip a, ip b  
  17. -> WHERE a.mac = b.mac AND a.ip <> b.ip ORDER BY a.mac;  
  18. +-----+-----+  
  19. | mac | ip   |  
  20. +-----+-----+  
  21. | abc | 678 |  
  22. | abc | 123 |  
  23. | def | 864 |  
  24. | def | 456 |  
  25. +-----+-----+  
  26. 4 rows in set (0.00 sec)  
  27.  

 

 

 

【编辑推荐】

教您如何实现MySQL全文查询

MySQL查询分页的优化

MySQL查询结果按某值排序

使用函数实现MySQL查询行号

MySQL查询中的非空问题

责任编辑:段燃 来源: 互联网
相关推荐

2010-09-07 16:38:36

SQL语句SELECT DIST

2018-06-07 09:45:08

2011-09-08 16:30:59

SQL Server查询

2010-06-11 17:36:46

MySQL语句

2010-05-21 16:55:47

MySQL EXPLA

2009-04-28 09:38:53

SQL优化物理查询

2010-09-03 14:39:15

SQLSELECT语句

2010-09-03 15:47:40

SQL语句锁定

2010-09-03 14:47:50

SQLSELECT语句

2010-09-03 11:25:58

SQL删除

2010-09-07 13:41:50

SQL语句

2021-02-25 09:35:32

语句elsePython

2010-05-13 17:52:41

MySQL语句

2010-04-13 14:43:37

Oracle性能检测

2010-09-07 14:56:49

SQL语句CASE WHEN

2010-09-07 10:19:31

SQL语句

2010-03-09 14:00:20

Python循环语句

2010-11-24 17:36:02

MySQL条件查询语句

2010-09-06 09:11:24

SQLUPDATE语句

2022-03-23 14:04:32

SQL字符串数据类型
点赞
收藏

51CTO技术栈公众号