0

結合から 5000 から 10000 までのレコードのサブセットを選択しようとしています。過去にこのようなクエリが機能するようになりましたが、やや複雑ではありませんでした。これが私が使用しようとしているクエリです。rownum/rnum 参照 (したがって外部選択) を削除すると、期待どおりにすべてのレコードを受け取るので、ロジックが適切であることがわかります。

SELECT      * 
    FROM    ( 
            SELECT  unique cl.riid_, 
                    rownum as rnum 
            FROM    <table 1> cl, <table 3> mil 
            WHERE   cl.opt = 0 AND 
                    (cl.st_ != 'QT' OR cl.st_ IS NULL) AND 
                    cl.hh = 0 AND 
                    cl._ID_ = mil._ID_ AND 
                    mil.TYPE in (0, 1, 2, 3, 4) AND 
                    EXISTS 
                        ( SELECT    'x' 
                            FROM    <table 2> sub 
                            WHERE   cl.ea_ = lower(sub.ea_) AND 
                                    sub.status = 0 AND 
                                    lower(sub.subscription) = 'partner' 
                        ) AND 
                    rownum <= 10000 
            ) 
    where   rnum > 5000

したがって、このクエリを実行すると、システムからこのメッセージが表示されます (これは Oracle CLI インターフェイスではなく、その上に存在する Web レイヤーなので、通常と異なる場合はエラー メッセージを表示してください)

「エラー: 表示用に選択されたリソースは無効です。データを表示する前に、オブジェクトを再作成または修正する必要がある場合があります。

リソースはクエリの結果になります。

それで、誰かが何が起こっているのか、またはこれを行うためのより良い方法について考えを持っていますか?

ありがとう!

4

1 に答える 1

2

Oracleで次のようなものを探していると思います。

select * 
  from ( select a.*, rownum rnum
           from ( YOUR_QUERY_GOES_HERE -- including the order by ) a
          where rownum <= MAX_ROWS )
 where rnum >= MIN_ROWS
/

AskTomからの良い議論はここにあります

于 2011-02-01T12:17:09.773 に答える