ほとんどの SQL 実装では、クエリで返されるすべての行の "スライディング ウィンドウ" サブセットを選択できるのが一般的です。これの一般的な使用例はページネーションです。たとえば、各ページに 10 件の結果がある検索ページがあるとします。LIMITおよびOFFSETキーワードをサポートする実装の場合、各ページの結果を返すために使用されるクエリは次のようになります: ページ 1 は を使用しSELECT ... LIMIT 10 OFFSET 0、ページ 2 は を使用しSELECT ... LIMIT 10 OFFSET 10、ページ 3 は を使用します(は の前に有効になるSELECT ... LIMIT 10 OFFSET 20ことに注意してください)。OFFSETLIMIT
とにかく、OpenEdge の SQL エンジンでこの機能を模倣しようとしています。SELECT TOP基本的に と同等であることはすでにわかっていLIMITますが、 に似たものは見つかりません (まったくOFFSET同等のものはないと思います)。SQL Server と Oracle にも はありませんが、ネストされた選択を使用して動作を模倣するために使用できる、それぞれおよび と呼ばれる疑似列があります (こちらとこちらを参照)。OFFSETROWCOUNTROWNUM
10.2B SQL リファレンスドキュメントの p49 には、一番下にあるTOP 句というタイトルのサブセクションがあります。
SELECT TOPOracle のROWNUM機能と機能的に同等です。SELECT TOPは、結果セット サイズの制限に関して単純に定義されており、最適なデータ アクセスのためにこの制限をどのように使用するかはオプティマイザによって決定されることに注意してください。したがって、オラクルの 句SELECT TOPの意味を定義するために使用されるすべての「手続き上の規則」があるわけではありません。ROWNUM
ただし、 の構文によれば、TOPcan のように述語として使用できないため、これは不正確なようですROWNUM(たとえば、 I can't say SELECT * FROM Customer WHERE TOP > 5 AND TOP < 10)。SoTOPは と機能的に同等ではありませんROWNUM。
を模倣する方法はありますかOFFSET、それとも運が悪いのでしょうか?