MySQL:无法在SELECT开始时添加常量字段错误1064

问题描述

使用MariaDB v。10,我尝试在所有其他列SELECT之前添加定义常量作为*查询的第一列。这将导致通用语法错误1064。

例如:

# MysqL -u root -p$mypass -D MysqL -e "SELECT 'X',* FROM user;"
ERROR 1064 (42000) at line 1: You have an error in your sql Syntax; check the manual that corresponds to your MariaDB server version for the right Syntax to use near '* FROM user' at line 1

如果我只选择一些列,那么它会起作用:

# MysqL -u root -p$mypass -D MysqL -e "SELECT 'X',host,user FROM user;"
+---+-----------------+------------------+
| X | host            | user             |
+---+-----------------+------------------+
| X | 127.0.0.1       | root             |
| X | ::1             | root             |
...

如果我使用*选择所有列,但将我的常量列放在其后

# MysqL -u root -p$mypass -D MysqL -e "SELECT *,'X' FROM user;"  
... [long,correct output] ...

如何进行SELECT 'some constant',* FROM my_table以避免这种奇怪的错误

解决方法

如果SELECT *SELECT列表中的第一件事,则只能使用。如果它与其他值混在一起,则需要使用表名或别名,

SELECT 'X',user.* FROM user;
,

*使用表别名。我也将第一列命名为:

SELECT 'X' as col,u.*
FROM user u;

在与其他值一起选择时,MySQL需要*的限定条件。