需要帮助了解MySql语法

时间:2019-05-20 21:28:16

标签: mysql sql union mysql-error-1064

我在MySql的hackerrank问题上陷入困境,并不断收到语法错误。我正在尝试选择字母顺序最短和最长的城市。

当我尝试按两个城市限制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

2 个答案:

答案 0 :(得分: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不是开始查询的有效关键字。

答案 1 :(得分:1)

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

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

您可以这样做:

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

但不是:

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

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

i = 123;
  + 456;

这很好:

i = 123 + 456;