oracle's rownum
pseudocolumn, часто используемый для ограничения набора результатов, представляет уникальную проблему в сочетании с упорядочением. В отличие от Mysql's Limit
Clause, который применяется после сортировки, rownum
filters до user order by . Это означает просто использование
rownum не гарантирует конкретную упорядоченную подмножество ваших результатов.
]
стандартный подход (All Oracle версии): ]
Чтобы достичь эквивалента функциональности MySQL Limit , используйте вложенный запрос:
]
SELECT *
FROM (
SELECT *
FROM emp
ORDER BY sal DESC
)
WHERE ROWNUM
Этот подход сначала заказывает данные, а затем применяет фильтр rownum , обеспечивая возврату 5 лучших зарплат.
]
Смешание и ограничивающие результаты: ]
для более сложного управления, указание как смещения, так и предела требует немного более сложного запроса:]
SELECT *
FROM (
SELECT a.*, ROWNUM rnum
FROM (
SELECT * -- Your main query with ORDER BY clause
FROM some_table
ORDER BY some_column
) a
WHERE ROWNUM = :MIN_ROW_TO_FETCH;
заменить : max_row_to_fetch и
: min_row_to_fetch с вашими нужными верхними и нижними границами. Это вызывает ряды в определенном диапазоне после заказа.
oracle 12c и кроме: fetch clause:
]
elech clause:
]
-- Retrieve the first 10 rows
SELECT *
FROM sometable
ORDER BY name
FETCH FIRST 10 ROWS ONLY;
-- Retrieve rows 20-30
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
eleatch представляет собой более чистый и более читаемый способ ограничения и сфона, что делает его предпочтительным методом для Oracle 12c и позже. Для старых версий вложенный подход запроса остается необходимым.
]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3