【发布时间】:2020-08-05 17:18:14
【问题描述】:
我正在尝试执行一个 SQL 查询来解决这个问题:**用最短和最长的 CITY 名称查询 STATION 中的两个城市,以及它们各自的长度(即:名称中的字符数)。如果有多个最小或最大的城市,请选择按字母顺序排列的第一个城市。 样本输入: 假设 CITY 只有四个条目: DEF、ABC、PQRS 和 WXY 样本输出: ABC 3 PQRS 4
**
我能够使用 MySQL 解决这个挑战。但是我在尝试在 Oracle 中解决同样的问题时遇到了错误,尽管有细微的变化。这正是我正在尝试的:
(SELECT CITY ,length(CITY)
FROM STATION
ORDER BY length(CITY) ASC ,CITY FETCH FIRST 1 ROW)
UNION ALL
(SELECT CITY ,length(CITY)
FROM STATION
ORDER BY length(CITY) DESC ,CITY FETCH FIRST 1 ROW);
我得到了错误:
ORDER BY length(CITY) ASC ,CITY FETCH FIRST 1 ROW)
*
ERROR at line 3:
ORA-00907: missing right parenthesis
我无法找出这里的错误,因为我能够在 MySQL 中以几乎类似的方式解决它。有人可以在这里指出我的错误吗?
【问题讨论】:
-
Oracle 11g 不支持
FETCH FIRST,所以这可能是一个问题。 -
我刚刚添加了它作为标签,我正在 Hackerrank 中执行此代码。我相信它们与版本无关。再次,你能告诉我是否使用 rownum 会更好。我尝试使用 rownum也收到了同样的错误。
-
Oracle 解析器经常说“缺少括号”,表示它遇到了意外情况。它指示错误的点 - 在这种情况下,
ORDER BY- 通常在语法上是无效的。现有答案之一解释了为什么在这种特殊情况下不允许使用ORDER BY。
标签: sql oracle oracle11g oracle-apex