需要帮助理解 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;
我在 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;