我在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
答案 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;