当前位置:  开发笔记 > 数据库 > 正文

使用WHERE语句未正确结束SQL命令

如何解决《使用WHERE语句未正确结束SQL命令》经验,为你挑选了1个好方法。

有了这个声明:

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;

订购完成后将对此子句进行评估,并返回前一行.



1> Gurwinder Si..:

你可能想要这个:

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;

订购完成后将对此子句进行评估,并返回前一行.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有