2017-01-24 43 views
0

运行以下查询时出现错误。我认为这是正确的语法。请帮忙。为查询ORA-00933获取以下错误:SQL命令未正确结束?

SELECT * from TESTTABLE1 ORDER BY USER_ID WHERE rownum>=100 AND rownum<=200 
+1

你应该最后放置'ORDER BY',试试'WHERE rownum> = 100和rownum <= 200 ORDER BY USER_ID' – Susang

+0

rownum条件应该做什么?看看[这](http://stackoverflow.com/questions/470542/how-do-i-limit-the-number-of-rows-returned-by-an-oracle-query-after-ordering) – Aleksej

+0

“*我认为这是正确的语法*” - 如果是这样,你不会得到语法错误 –

回答

0

我不知道我在下面你要选择100从表中的第200行的meaning.if,查询语句可能会有所帮助:

select * 
from (select * 
    from (SELECT * 
     from TESTTABLE1 
     ORDER BY USER_ID) 
    where rownum <= 200 
    ORDER BY USER_ID desc) 
where rownum <= 100; 
+1

ROWNUM和ORDER BY不按照你喜欢的方式一起玩。另外,这不会总是返回前100行吗? – APC

+0

我使用'desc'来获得第二个100行。 –

+0

因此,您可以颠倒返回结果集的顺序。真的,你需要另一个外部查询ORDER BY USER_ID ASC以正确的顺序返回结果。这是很多种。使用ROWNUM以外的东西不是更容易吗? – APC

0

想必分页问题。困难的部分是获得一致的排序顺序。使用rownumorder by的解决方案将不起作用,因为在排序之前应用了停止。

该解决方案有一个with子句子查询来生成排序键,这将是可靠的,只要子句中的列构成了独特的组合。

with pages as (
SELECT t1.* 
     , row_number() over (ORDER BY t1.USER_ID) as rn 
from TESTTABLE1 t1) 
select pages.user_id 
from pages 
WHERE pages.rn >=100 AND pages.rn <=200 

注意,你需要在主查询的投影指定列(排除rn),但是这是很好的做法作为select *是等待发生的错误。

相关问题