mysql中的distinct为什么只能返回distinct后面的字段??这样设计的原因何在?

  1. select distinct name from user;
    这条distinct语句只能返回name值
  2. 如果我想返回其他值就必须用
    select id,email,address,count(distinct name) from user group by name;
  3. 若使用select id,email,address,distinct name from user;
    则报错

问:为什么mysql不能把distinct设计成可以拥有直接包含其他返回值的功能,我感觉这种才是更常见的吧。原因何在?

阅读 2.9k
3 个回答

猜测楼主是想根据name分组,同时返回id,email,address

但当name相同,存在2个不同的id,返回结果不明确,MySQL是不支持出现语义不明确的列

建议使用GROUP BY+聚合函数来查询

MySQL5.7新增ANY_VALUE, MySQL5.6可删除ONLY_FULL_GROUP_BY模式

SELECT
  MAX(`id`), ANY_VALUE(`email`), ANY_VALUE(`address`), `name`
FROM
  `user`
GROUP BY `name`;  
  1. select name 当然只返回name值啊
  2. 要这么写select distinct id,email,address,name from user;
  3. distinct 不是针对字段的,是针对记录的。
    select distinct id,email,address,name意味着id,email,address,name全部相同才算相同

就你第二条语句,name 一样,email不一样的两条数据查询结果是啥呢?你这样想的话,和group by又啥不同呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题