面试了几个程序员,发现他们对于 mysql 的 distinct 关键字都存在错误的理解

2020-07-20 16:01:24 +08:00
 JJstyle

都认为这是一个函数,可以这样用:

select distinct(name), age from test;

目的是给 name 去重。虽然没有报错,但是其实上面的 sql 最终被解析成:

select distinct (name), age from test;

就是说 distinct 不是一个函数,而是 select 的一部分,结果是给 name,age 的组合数据去重,name 加括号在这里没有什么意义。

是那种工作了 3~5 年工作经验的,不知道 v 友们又没有发现这个问题。

7522 次点击
所在节点    MySQL
42 条回复
raaaaaar
2020-07-20 18:09:49 +08:00
比较赞同,“是什么”的知识更多的是考察经验,能解释“为什么”的知识才是重点,后者还能考察应试者的思路
NetCobra
2020-07-20 18:26:37 +08:00
从来没有这么用过,意思上也解释不通。
只给 name 去重不应该是 group by 吗?
fhsan
2020-07-20 18:34:23 +08:00
我都是 group by,其实你这是考察一条 SQL 执行到底发生了什么
Still4
2020-07-20 18:47:06 +08:00
没这么用过肯定不知道的,也就是说相当于
```
select name,age from test group by name,age;
```
lxk11153
2020-07-20 18:54:13 +08:00
select name,age from test group by name,age;
select distinct name,age from test ;
有性能,或者内存占用,等等差异吗?求解
zsdroid
2020-07-20 18:55:09 +08:00
百度+bing 搜索 distinct,排第一的都是 w3school
https://www.w3school.com.cn/sql/sql_distinct.asp
该教程里只用了一个字段来做演示,有一定的误导性,让看的人以为这是针对某个字段的。
wshcdr
2020-07-20 20:24:15 +08:00
w3school 的教程有点一言难尽
chaffy
2020-07-20 20:29:27 +08:00
学习了学习了
Egfly
2020-07-20 20:41:05 +08:00
估计是没系统学过 mysql,不然不可能不知道这个
hheedat
2020-07-20 20:42:51 +08:00
工作六年,没用过 distinct ... 学习了
Chieh
2020-07-20 20:59:42 +08:00
蛤?怎么会是函数 distinct 只能和 select 一起用,我一直当作是 select 的另一个版本
talen666
2020-07-20 22:10:27 +08:00
(・。・)虽然用的少,但知道是个关键字,不是函数
Justin13
2020-07-20 22:12:39 +08:00
<query spec> ::= SELECT [ ALL | DISTINCT ] <select list> <table expression>
walkerliu
2020-07-20 22:19:13 +08:00
这种题问我虽然我能答的上来,但我觉得这种题目是问不出一个人的真实水平的
l00t
2020-07-20 22:22:13 +08:00
居然还能理解成只去重一个字段的函数?从知道这个 distinct 开始就从没那样理解过,句意上都不通啊……
jun0205
2020-07-20 23:18:36 +08:00
这种面试能考啥,这样去重应该用 group by 的居多。
你这算是自己设计的一个坑,大部分人用也不会这样用,文档语法也没有这种,也就不会遇不到这个坑。
Narcissu5
2020-07-21 09:30:13 +08:00
@yuk1no 实际上 group 也有这种的问题,聚合条件之外的列怎么处理,sqlserver,oracle 里面这样的列不带聚合函数就会报错

但是 mysql 是可以正常工作的,是的,mysql 就是这样一种神奇的数据库。所以在 mysql 里面即使认为是单列聚合也没什么说不通的
yuwangG
2020-07-21 10:17:29 +08:00
学到了~
aguesuka
2020-07-21 12:37:34 +08:00
@Narcissu5 没开严格模式
leonardyang
2020-07-21 16:56:43 +08:00
我记得 distinct 在 oracle 和 sqlserver 的语法树上是关键字吧,肯定不是函数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/691611

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX