最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 18:29:23
文档

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

查询数据库多个字段名时的结果有重复的解决办法_MySQL:bitsCN.com 查询数据库多个字段名时的结果有重复的解决办法 查询数据库的结果有重复,怎么办? 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的
推荐度:
导读查询数据库多个字段名时的结果有重复的解决办法_MySQL:bitsCN.com 查询数据库多个字段名时的结果有重复的解决办法 查询数据库的结果有重复,怎么办? 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的


bitsCN.com


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

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

在使用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', '123456702'),

(10034, 'asdf', '139775873'),

(10023, 'qwer', '139775873'),

(10039, 'edcvfr', '132678587'),

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

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

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

(2003876, NULL, '123456701'),

(2003877, 'wertyuu', '123456701'),

(2003878, 'rtyuijkd', '123456701');

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

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

重复记录。

select distinct telephone from table

telephone的结果是:

123456701

123456702

132678587

13687879832

139775873

18701395130

18783493002

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

select distinct telephone,uid,username from table

结果会是:

uid username telephone

2003875 qsdcz 123456702

10034 asdf 139775873

10023 qwer 139775873

10039 edcvfr 132678587

2003874 234jhkus 18701395130

10982 234jhkus 18783493002

12234 cfdfv 13687879832

2003876 sdf 123456701

2003877 wertyuu 123456701

2003878 rtyuijkd 123456701

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 123456701

2003875 qsdcz 123456702

10039 edcvfr 132678587

12234 cfdfv 13687879832

10023 qwer 139775873

2003874 234jhkus 18701395130

0982 234jhkus 18783493002

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

bitsCN.com

文档

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

查询数据库多个字段名时的结果有重复的解决办法_MySQL:bitsCN.com 查询数据库多个字段名时的结果有重复的解决办法 查询数据库的结果有重复,怎么办? 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top