一時テーブルを作成せずにSybaseでページングを行うにはどうすればよいですか? (oracle rownumの問題)

StackOverflow https://stackoverflow.com/questions/1225889

  •  22-07-2019
  •  | 
  •  

質問

Oracleでは、通常、ページングのためにこのようなクエリを実行します。

SELECT * FROM (SELECT *, rownum rid  FROM TABLEA WHERE rownum <= #pageend#)
WHERE rid > #pagestart#

ただし、<!> quot; rownum <!> quot;はありません。 Sybase DBMSの関数。

Sybaseでまったく同じクエリを実行するにはどうすればよいですか?

いくつかの方法を見つけました。

  1. <!> quot; rowcount <!> quot;

    を使用

    行数10を設定

    select * from TABLEA

  2. IDを使用(一時テーブルを作成)

    SELECT *、ROWNUM = IDENTITY(8)INTA #TEMP FROM TABLEA

    SELECT * FROM #TEMP WHERE ROWNUM <!> lt; #pageend#AND ROWNUM <!> gt; = #pagestart#

    ドロップテーブル#TEMP

これらは私が望むものではありません。

rowcountはセッションレベルで設定されており、一時テーブルを作成したくありません。

役に立ちましたか?

解決

テーブルに一意のid列がある場合は、SELECT TOP nを使用できます

SELECT TOP 10 *
FROM tableA
WHERE id BETWEEN @start AND @end

他のヒント

これにより、すべての ids が得られるため、<!> quot; select * where id_column in (ids from query below) <!> quot;

などの選択でそれらを使用できます。
select top 10 id_column from trade
where @whereClause
and id_column > 0  //keep replacing this with the max id from the result set
order by id_column
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top