2017-01-24 45 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 *是等待發生的錯誤。

相關問題