Jak naśladować SELECT… LIMIT, OFFSET w OpenEdge SQL?

W większości implementacji SQL powszechną rzeczą jest możliwość wyboru podzbioru „przesuwnych okien” wszystkich wierszy zwracanych w zapytaniu. Typowym przypadkiem użycia jest paginacja. Załóżmy na przykład, że mam stronę wyszukiwania z 10 wynikami na każdej stronie. Dla wdrożeń, które obsługująLIMIT iOFFSET słowa kluczowe, zapytanie używane do zwracania wyników dla każdej strony byłoby następujące: strona, której użyjeszSELECT ... LIMIT 10 OFFSET 0, strona 2 użyłabySELECT ... LIMIT 10 OFFSET 10, strona 3 użyjeSELECT ... LIMIT 10 OFFSET 20itd. (zauważ, żeOFFSET zaczyna działać przedLIMIT).

W każdym razie próbuję naśladować tę funkcjonalność w silniku SQL OpenEdge. Już to zrozumiałemSELECT TOP jest w zasadzie równoważnyLIMIT, jednak nie mogę znaleźć niczego podobnegoOFFSET (Nie sądzę, że istniejedokładny odpowiednik). SQL Server i Oracle również nie posiadająOFFSET, ale mają pseudokolumnęROWCOUNT iROWNUM, odpowiednio, które mogą być użyte do naśladowania zachowania przy użyciu zagnieżdżonych selekcji (patrztutaj itutaj).

w10.2B SQL Reference doc, str. 49 znajduje się podrozdział zatytułowanyKlauzula TOP to mówi na dole

SELECT TOP jest funkcjonalnym odpowiednikiem OracleROWNUM funkcjonalność. Zauważ, żeSELECT TOP jest definiowany po prostu jako ograniczenie rozmiaru zestawu wyników, a optymalizator określa, jak wykorzystać ten limit w celu uzyskania najlepszego dostępu do danych. A zatem,SELECT TOP nie ma wszystkich „reguł proceduralnych” używanych do zdefiniowania znaczenia WyroczniROWNUM wyrażenie.

Jednak wydaje się, że jest to niedokładne, zgodnie zTOPSkładnia nie może być używana jako predykatROWNUM może (np. nie mogę powiedziećSELECT * FROM Customer WHERE TOP > 5 AND TOP < 10). WięcTOP jestnie funkcjonalnie równoważnyROWNUM.

Czy jest jakiś sposób naśladowaniaOFFSET, czy nie mam szczęścia?

questionAnswers(1)

yourAnswerToTheQuestion