2017-01-24 3 views
0

次のクエリを実行中にエラーが発生します。私はそれが正しい構文だと思う。助けてください。問合せで次のエラーが発生しましたORA-00933:SQLコマンドが正しく終了しませんでしたか?

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

最後に 'ORDER BY'を置いて、' WHERE rownum> = 100 AND rownum <= 200 ORDER BY USER_ID' – Susang

+0

を実行してください。 [this]を見てください(http://stackoverflow.com/questions/470542/how-do-i-limit-the-number-of-rows-returned-by-an-oracle-query-after-ordering) – Aleksej

+0

"*正しい構文だと思う*" - それが文法エラーではない場合 –

答えて

0

私は私はあなたがテーブルから200番目の行に100番目の選択したいあなた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」を使って2番目の100行を取得します。 –

+0

返された結果セットの順序を逆にします。実際には、結果を正しい順序で戻すために、ORDER BY USER_ID ASCに別の外部クエリが必要です。どちらがたくさんあるのですか? ROWNUM以外のものを使う方が簡単でしょうか? – APC

0

おそらく、ページネーションの問題。難しい部分は一貫した並べ替え順序を取得しています。 rownumorder byのソリューションは、ソートの前に停止が適用されるため、機能しません。

この解決策は、order 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 *が起こるのを待っているバグがあるとして、それは良い習慣です。

関連する問題