这两个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'附近使用
答案 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.*
参考。