Подтвержденный ответ совершенно неверный.
Рассмотрим подзапрос, который генерирует уникальный номер индекса строки.
Например ROWNUM
в Oracle.
Вам нужен подзапрос, чтобы создать уникальный номер записи для целей подкачки (см. Ниже).
Рассмотрим следующий пример запроса:
SELECT T0.*, T1.* FROM T0 LEFT JOIN T1 ON T0.Id = T1.Id
JOIN
(
SELECT DISTINCT T0.*, ROWNUM FROM T0 LEFT JOIN T1 ON T0.Id = T1.Id
WHERE (filter...)
)
WHERE (filter...) AND (ROWNUM > 10 AND ROWNUM < 20)
ORDER BY T1.Name DESC
Внутренний запрос - это точно такой же запрос, но DISTINCT
в T0.
Вы не можете поместить ROWNUM
во внешний запрос, поскольку LEFT JOIN
(s) может генерировать гораздо больше результатов.
Если бы вы могли заказать внутренний запрос (T1.Name DESC
), сгенерированный ROWNUM
во внутреннем запросе совпадет.
Поскольку вы не можете использовать ORDER B
Y в подзапросе, числа не будут совпадать и будут бесполезны.
Слава богу, что ROW_NUMBER OVER (ORDER BY ...)
исправляет эту проблему.
Хотя поддерживается не всеми механизмами БД.
Один из двух методов, LIMIT
(не требует ORDER
) и ROW_NUMBER() OVER
, будет охватывать большинство механизмов DB.
Но, тем не менее, если у вас нет одного из этих параметров, например, ROWNUM
- ваш единственный вариант, тогда ORDER BY
в подзапросе является обязательным!