查询数据库多个字段名时的结果有重复的解决办法_MySQL

php中文网
发布: 2016-06-01 13:36:49
原创
2818人浏览过

bitsCN.com


查询数据库多个字段名时的结果有重复的解决办法

 

AutoGLM沉思
AutoGLM沉思

智谱AI推出的具备深度研究和自主执行能力的AI智能体

AutoGLM沉思 239
查看详情 AutoGLM沉思

 查询数据库的结果有重复,怎么办?  

     在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。

其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,结果是我们两人都郁闷了。    

 

    下面先来看看例子:   

表的结构 `member` 

CREATE TABLE IF NOT EXISTS `member`  

(   `uid` int(7) NOT NULL AUTO_INCREMENT,  

  `username` varchar(8) DEFAULT NULL,  

  `telephone` varchar(11) DEFAULT NULL,  

  PRIMARY KEY (`uid`) ) 

 ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2003879 ;  

 

转存表中的数据 `member`  

INSERT INTO `member` (`uid`, `username`, `telephone`)  

VALUES (2003875, 'qsdcz', '12345678902'),  

(10034, 'asdf', '13989775873'),  

(10023, 'qwer', '13989775873'), 

 (10039, 'edcvfr', '13267864587'),  

(2003874, '234jhkus', '18701395130'), 

 (10982, '234jhkus', '18783493002'), 

 (12234, 'cfdfv', '13687879832'), 

 (2003876, NULL, '12345678901'),  

(2003877, 'wertyuu', '12345678901'), 

 (2003878, 'rtyuijkd', '12345678901'); 

     库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。  

     比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的

重复记录。  

select distinct telephone from table 

    telephone的结果是:  

12345678901 

 

12345678902   

 

13267864587   

 

13687879832   

 

13989775873   

 

18701395130   

 

18783493002 

    好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:  

select distinct telephone,uid,username from table 

  结果会是:

uid username telephone 

2003875 qsdcz 12345678902 

10034 asdf 13989775873  

10023 qwer 13989775873  

10039 edcvfr 13267864587  

2003874 234jhkus 18701395130 

10982 234jhkus 18783493002  

12234 cfdfv 13687879832  

2003876 sdf 12345678901 

2003877 wertyuu 12345678901 

2003878 rtyuijkd 12345678901  

 

    distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。我们再改改查询语句:      

select id, distinct name from table 

   很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。

   该怎么办呢?我们用函数统计需要不重复的字段。居然成功了。

   现在将完整语句放出:

select *, count(distinct telephone) from table group by telephone  

 结果:    

uid username telephone 

2003878 rtyuijkd 12345678901 

2003875 qsdcz 12345678902 

10039 edcvfr 13267864587 

12234 cfdfv 13687879832  

10023 qwer 13989775873 

2003874 234jhkus 18701395130 

0982 234jhkus 18783493002  

 目的达到。能够解决问题就可以了。

 

bitsCN.com
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号