ROWNUM
- это псевдоколонка, созданная Oracle, когда вы выполняете команду SELECT
. Назначение значения ROWNUM
- это последнее, что было сделано до того, как запрос вернет строку - таким образом, первая строка, испускаемая запросом, дана ROWNUM = 1, вторая строка, испускаемая запросом, предоставляется ROWNUM = 2 и т. Д. , Обратите внимание: это означает, что оператор вроде следующего не ВЕРНЕТСЯ НЕТ ROWS:
SELECT *
FROM SOME_TABLE
WHERE ROWNUM >= 2
Почему же это вернуть ни одной строки? Это потому, что первая строка, которая будет испускаться запросом, всегда предоставляется ROWNUM = 1, и поскольку запрос ищет только строки с ROWNUM> = 2, никакие строки не будут выбраны, потому что первое значение ROWNUM 1 применяется к первому искривлен ряд.
ОДНАКО - если вы действительно хотите получить все строки, за исключением первого (или первые 10, или что там у вас), вы можете сделать это следующим образом:
SELECT *
FROM (SELECT *, ROWNUM AS INNER_ROWNUM
FROM SOME_TABLE
WHERE SOMETHING = SOMETHING_ELSE
ORDER BY WHATEVER) i
WHERE i.INNER_ROWNUM IN (1, 2, 3, 5, 7, 11, 13, 17, 19);
Здесь мы используем внутренний ВЫБРАТЬ который получает ВСЕ строки для данного условия (SOMETHING = SOMETHING_ELSE) и присваивает ROWNUM из запроса INNER вычисляемому столбцу с именем INNER_ROWNUM, который затем мы можем использовать как обычный столбец во внешнем запросе.
Почему бы не использовать ** Выбрать Top **? – code
@code - Потому что Oracle не поддерживает 'TOP' –
Да, но у вас уже есть эквивалент oracle ** rownum ** почему это не работает – code