ページングを行う最も自然で効率的な方法は、LIMIT/OFFSET(SybaseのTOP)構造を使用することです。 DB非依存の方法は、実行中のエンジンを知り、適切なSQL構造を適用する必要があります。
少なくとも、これは私がDB独立ライブラリのコードで行ったのと同じ方法です。特定のクエリを使用してエンジンからデータを取得すると、ページングロジックを抽象化できます。
本当に単一の1つのSQL文ソリューションをお探しの場合は、あなたが念頭に置いていることを示すことができますか? tempテーブルソリューションのSQLと同じです。おそらくより関連性の高い提案を得るでしょう。
EDIT:
は私が一時テーブルでそれを行う方法を見ていないとエンジン特有の構文を使用することができなかったので、あなたが考えていたか見てみたかったです。この例では、特定の構文を使用しています。私はまだ(実装された)標準SQLだけでデータベースにページングを実装する方法を見ていません。テーブル全体を標準のSQLとアプリケーションのページに入れることはできますが、それは明らかに愚かです。
これで、「LIMIT/OFFSETまたは同等のものを使用せずにページングを実装する方法はありますか?私は答えが "Sanely、no"だと思います。あなたはカーソルを使ってみることもできますが、そこにはデータベース特有の文章や行動にも惑わされます。
ちょうど私に起こったwacko(read stupid)というアイデアは、create table test(id int、name varchar、phone varchar、page int)というページ列をテーブルに追加し、 1つのテーブルからselect * from page = 1。これは、その列を維持するためのコードを追加する必要があることを意味します。これは、データベース全体を取り込むかデータベース固有の構造を使用することによってのみ行うことができます。これは、各可能な順序ごとに異なる列を追加しなければならず、他の多くの欠陥があります。
私は証拠を提供することはできませんが、本当にあなたはそれをうまく行かないと思います。
まあ、私は別のソリューションを試してみましたが、それは多かれ少なかれポータブル版を作成することは不可能と思われる。 – aku