程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql查詢語句中distinct的問題

mysql查詢語句中distinct的問題

編輯:MySQL綜合教程

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查詢中的非空問題

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved