数据库|mysql教程
关键字,数据库,mysql,记录
数据库-mysql教程
qq源码资源网,vscode运行vue本地部署,ubuntu xorg,tomcat tps,sqlite转制,22个网页设计经典案例不容错过,php导入xls到数据库,国内免费 mysql服务器,web移动端轮播图插件,前端和前端框架,爬虫会员,php 查询字符串,谈谈seo,springboot 分表,织梦tag标签调用代码,网站源码下载vs,html点击图片跳转网页代码,jquery web模板,网站后台多附件上传,h5页面 php,vb客户管理系统源码,易程序教程lzw
查询数据库多个字段名时的结果有重复的解决办法
锦尚中国的源码怎么样,vscode使用教程img,ubuntu 安装ppp,出入站规则 tomcat,win10打开sqlite,茉莉花上有爬虫怎么办呀,php 搜索系统,荥阳霸屏seo推广,iis中网站无法运行,html静态网站模板lzw
查询数据库的结果有重复,怎么办?
html5 请帖源码,台式电脑ubuntu安装,tomcat6配置远程调试,可爱爬虫的动物,外包公司面试php学习,seo通俗解释lzw
在使用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=879 ;
转存表中的数据 `member`
INSERT INTO `member` (`uid`, `username`, `telephone`)
VALUES (875, ‘qsdcz’, ‘12345678902’),
(10034, ‘asdf’, ‘13989775873’),
(10023, ‘qwer’, ‘13989775873’),
(10039, ‘edcvfr’, ‘13267864587’),
(874, ‘234jhkus’, ‘18701395130’),
(10982, ‘234jhkus’, ‘18783493002’),
(12234, ‘cfdfv’, ‘13687879832’),
(876, NULL, ‘12345678901’),
(877, ‘wertyuu’, ‘12345678901’),
(878, ‘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
875 qsdcz 12345678902
10034 asdf 13989775873
10023 qwer 13989775873
10039 edcvfr 13267864587
874 234jhkus 18701395130
10982 234jhkus 18783493002
12234 cfdfv 13687879832
876 sdf 12345678901
877 wertyuu 12345678901
878 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
878 rtyuijkd 12345678901
875 qsdcz 12345678902
10039 edcvfr 13267864587
12234 cfdfv 13687879832
10023 qwer 13989775873
874 234jhkus 18701395130
0982 234jhkus 18783493002
目的达到。能够解决问题就可以了。