有了这个声明:
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) WHERE ROWNUM = 1;
为什么我会收到此错误:
第1行的错误:
ORA-00933:SQL命令未正确结束SELECT CITY,LENGTH(CITY)FROM STATION ORDER BY LENGTH(CITY)ROWNUM = 1
Gurwinder Si.. 6
你可能想要这个:
select * from ( SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) ) WHERE rownum = 1;
您的查询中存在语法错误,因为ORDER BY
它位于该WHERE
子句之后.所以,在修复语法错误之后你会有这个:
SELECT CITY, LENGTH(CITY) FROM STATION WHERE ROWNUM = 1 ORDER BY LENGTH(CITY)
如果您还记得,该WHERE
条款在该ORDER BY
条款之前进行了评估.因为,ROWNUM 伪列返回一个数字,表示Oracle从一个表或一组连接的行中选择行的顺序.选择的第一行的a ROWNUM
为1,第二行的为2,依此类推.在ROWNUM
返回值1,2,3,...总部设在从表中数据的顺序station
被取出(可以按任意顺序排列),这可能不是你想要的.
如果将ORDER BY
子句嵌入子查询中并将ROWNUM
条件放在顶级查询中,则可以强制ROWNUM
在排序行之后应用条件.
所以,你的查询变为:
select * from ( SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) ) WHERE rownum = 1;
在此,首先根据子查询中CITY列的内容长度对行进行排序,然后ROWNUM
按CITY列长度的递增顺序应用.所以,现在你可以使用ROWNUM = 1
谓词过滤出第一行.
或者,在Oracle数据库12c及更高版本中,您可以使用该FETCH FIRST N ROWS ONLY
子句使您的生活更轻松(不需要子查询).
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) FETCH FIRST 1 ROW ONLY;
订购完成后将对此子句进行评估,并返回前一行.
你可能想要这个:
select * from ( SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) ) WHERE rownum = 1;
您的查询中存在语法错误,因为ORDER BY
它位于该WHERE
子句之后.所以,在修复语法错误之后你会有这个:
SELECT CITY, LENGTH(CITY) FROM STATION WHERE ROWNUM = 1 ORDER BY LENGTH(CITY)
如果您还记得,该WHERE
条款在该ORDER BY
条款之前进行了评估.因为,ROWNUM 伪列返回一个数字,表示Oracle从一个表或一组连接的行中选择行的顺序.选择的第一行的a ROWNUM
为1,第二行的为2,依此类推.在ROWNUM
返回值1,2,3,...总部设在从表中数据的顺序station
被取出(可以按任意顺序排列),这可能不是你想要的.
如果将ORDER BY
子句嵌入子查询中并将ROWNUM
条件放在顶级查询中,则可以强制ROWNUM
在排序行之后应用条件.
所以,你的查询变为:
select * from ( SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) ) WHERE rownum = 1;
在此,首先根据子查询中CITY列的内容长度对行进行排序,然后ROWNUM
按CITY列长度的递增顺序应用.所以,现在你可以使用ROWNUM = 1
谓词过滤出第一行.
或者,在Oracle数据库12c及更高版本中,您可以使用该FETCH FIRST N ROWS ONLY
子句使您的生活更轻松(不需要子查询).
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) FETCH FIRST 1 ROW ONLY;
订购完成后将对此子句进行评估,并返回前一行.