一時テーブルを作成せずにSybaseでページングを行うにはどうすればよいですか? (oracle rownumの問題)
質問
Oracleでは、通常、ページングのためにこのようなクエリを実行します。
SELECT * FROM (SELECT *, rownum rid FROM TABLEA WHERE rownum <= #pageend#)
WHERE rid > #pagestart#
ただし、<!> quot; rownum <!> quot;はありません。 Sybase DBMSの関数。
Sybaseでまったく同じクエリを実行するにはどうすればよいですか?
いくつかの方法を見つけました。
-
<!> quot; rowcount <!> quot;
を使用行数10を設定
select * from TABLEA
-
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
所属していません StackOverflow