MySQL:将通配符与group by一起使用时,列的排序具有奇怪的行为

时间:2019-01-05 21:26:55

标签: mysql group-by mysql-workbench

这两个MySQL语句有什么区别?

作品:

select *, count(mycol) c from mytable group by mycol;

不起作用:

select count(mycol) c, * from mytable group by mycol;

第一个语句按我的预期工作,而第二个语句给我一个语法错误。为什么顺序很重要?

我无法从Google找到答案,因为我不确定我是否正确提出了这个问题。

编辑:

这是经过清理的错误消息。如果相关,我正在使用MySQL Workbench。

  

错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的'* from mytable group by id'附近使用

1 个答案:

答案 0 :(得分:2)

只需为表加上别名,语法错误就会消失。

select count(t.id) c, t.* from mytable t group by id;

请参见this db fiddle

看起来MySQL仅允许*之后才使用裸露(不合格)的SELECT。以下查询还会引发语法错误:

select 1, * from mytable t;

The documentation防止将裸露的*SELECT列表中的其他项目结合使用:

  

仅由一个不合格的*组成的选择列表可以用作从所有表中选择所有列的速记。

     

将不合格的*与选择列表中的其他项目一起使用可能会产生解析错误。为避免此问题,请使用合格的tbl_name.*参考。