使用DISTINCT查询时列的顺序错误

时间:2016-12-29 12:58:47

标签: mysql

这有效:

SELECT DISTINCT(id), 4 FROM table

这会返回错误:

SELECT 4, DISTINCT(id) FROM table

错误讯息:

  

SQL错误(1064):您的SQL语法中有错误;检查   手册,对应右边的MySQL服务器版本   在' DISTINCT(id)FROM table'附近使用的语法在第1行

为什么?

1 个答案:

答案 0 :(得分:2)

  

" @ Fred-ii-看来你的评论应该是一个答案。 - Francisco R"

根据OP的要求:

手册'语法是特定的:

因为它没有表明你可以在DISTINCT之前放置任何东西。

选择

SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [MAX_STATEMENT_TIME = N]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]

DISTINCT:

SELECT DISTINCT c1, c2, c3 FROM t1
WHERE c1 > const;

修改

Zev Spitz在评论中提出了一些有用的观点:

  

我猜测,但也许是SELECT DISTINCT(id),4 FROM表相当于SELECT DISTINCT id,4 FROM table。这表明,如果你真的有一个强烈的愿望使用带括号的DISTINCT,你可以编写SELECT DISTINCT(4),id FROM table。

  

OP希望id为秒。但我的观点是括号对DISTINCT没有影响,因为DISTINCT不是函数。

在(我)对此的回应中:

  

SELECT DISTINCT(id),4会先将id排序,而不是SELECT DISTINCT(4),这会将id排在第二位。

因此,如果查询是返回id(排序)秒,那么可以使用以下查询来实现此目的:

SELECT DISTINCT (4), id FROM table

的差异:

SELECT DISTINCT(id), 4 FROM table

enter image description here

以下两者都产生相同的结果,有或没有括号:

SELECT DISTINCT (4), id FROM table

SELECT DISTINCT 4, id FROM table

enter image description here