需要帮助理解 MySql 语法

Need help understanding MySql syntax

我在 MySql 的这个 hackerrank 问题上卡住了,一直收到语法错误。我正在尝试 select 按字母顺序排列的名称最短和最长的城市。

当我尝试按城市限制 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 个 order by,其中只需要两个。

(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 不是启动查询的有效关键字。

通过使用 ; 终止您的第一个 SELECT 查询,您已经使它成为一个完全独立的语句。

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

你可以这样做:

(SELECT ...) UNION (SELECT ...);

但不是:

(SELECT ...); UNION (SELECT ...);

打个比方,假设您使用 Java 或 PHP 或其他以分号结束语句的语言进行编码。以下尝试并添加两个数字将是一个错误:

i = 123;
  + 456;

虽然这很好:

i = 123 + 456;