需要帮助理解MySql语法吗

需要帮助理解MySql语法吗,mysql,sql,union,mysql-error-1064,Mysql,Sql,Union,Mysql Error 1064,我被MySql的黑客链接问题所困扰,并不断收到一个语法错误。我正在尝试选择按字母顺序排列的最短和最长名称的城市 当我尝试按城市限制1对它们进行排序时,我收到一个错误。当我在第二次查询后仅按城市限额1订购时,我只收到第一次查询的响应 (select CITY, length(CITY) from STATION order by length(CITY) limit 5) order by city limit 1; UNION (select CITY, length(CITY) from

我被MySql的黑客链接问题所困扰,并不断收到一个语法错误。我正在尝试选择按字母顺序排列的最短和最长名称的城市

当我尝试按城市限制1对它们进行排序时,我收到一个错误。当我在第二次查询后仅按城市限额1订购时,我只收到第一次查询的响应

(select CITY, length(CITY) from STATION order by length(CITY) limit 5) order by city limit 1; 
UNION 
(select CITY, length(CITY) from STATION order by length(CITY) DESC limit 5) order by city limit 1; 
这是我收到的错误

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION 
(select CITY, length(CITY) from STATION order by length(CITY) DESC limit ' at line 2

您有4个订购人,其中只需要两个

(select CITY, length(CITY)
 from STATION
 order by length(CITY)
 limit 1
) union all
(select CITY, length(CITY)
 from STATION
 order by length(CITY) DESC
 limit 1
);
不清楚为什么要在子查询中使用
limit 5
,但在子查询之外使用
limit 1


查询的另一个问题是,在第一个子查询后有一个分号,实际上是将复合查询一分为二,
union
不是启动查询的有效关键字。

通过使用
终止第一个
选择
查询您已将其作为一个完全独立的声明

UNION
需要放在两个简单查询之间,但您的查询不是

您可以这样做:

(SELECT ...) UNION (SELECT ...);
但不是:

(SELECT ...); UNION (SELECT ...);
通过类比,想象一下,若您使用Java、PHP或其他语言编写代码,以分号终止语句。以下尝试并添加两个数字将是错误的:

i = 123;
  + 456;
鉴于这将是很好的:

i = 123 + 456;