ページングを行う最も自然で効率的な方法は、LIMIT/OFFSET (Sybase の世界では TOP) 構文を使用することです。DBに依存しない方法では、それが実行されているエンジンを認識し、適切なSQL構造を適用する必要があります.
少なくとも、DB に依存しないライブラリのコードで見た方法です。特定のクエリを使用してエンジンからデータを取得したら、ページング ロジックを抽象化できます。
単一の 1 つの SQL 文による解決策を本当に探しているのであれば、何を考えているのか教えていただけますか? 一時テーブル ソリューションの SQL と同様です。おそらく、より関連性の高い提案が得られるでしょう。
編集:
エンジン固有の構成を使用せずに一時テーブルでそれを行う方法がわからなかったので、あなたが何を考えているのかを見たかったのです。例では特定の構造を使用しました。(実装された) 標準 SQL のみを使用してデータベースにページングを実装する方法はまだわかりません。テーブル全体を標準 SQL に取り込み、ページをアプリケーションに取り込むこともできますが、それは明らかにばかげています。
したがって、質問は「LIMIT/OFFSET または同等のものを使用せずにページングを実装する方法はありますか?」のようなものになります。答えは「正気ではありません」だと思います。カーソルを使用することもできますが、データベース固有の文/動作の餌食にもなります。
私が思いついた奇抜な (愚かなことを読む) アイデアは、テーブルにページ列を追加することです。たとえば、テーブル テスト (id int、name varchar、phone varchar、page int) を作成すると、select * でページ 1 を取得できます。 from table where page = 1.しかし、それはその列を維持するためにコードを追加しなければならないことを意味します。これも、データベース全体を持ってくるか、データベース固有の構造を使用することによってのみ行うことができます。それ以外にも、可能な順序ごとに異なる列を追加する必要があり、その他の多くの欠陥があります。
証拠は出せませんが、あなたは正気ではないと思います。