Как ограничить количество записей, возвращаемых запросом ORACLE? - PullRequest
2 голосов
/ 21 декабря 2010

Как ограничить количество записей, возвращаемых запросом ORACLE?

и

, как, по вашему мнению, лучше всего?

Ответы [ 5 ]

6 голосов
/ 21 декабря 2010

Добавьте "где rownum <= количество записей" в конце вашего запроса. </p>

3 голосов
/ 19 ноября 2014

Начиная с Oracle 12c, вы также можете использовать fetch first row only.

Первая строка:

select * from example fetch first row only;

Первые 10 строк:

select * from example fetch first 10 rows only;
2 голосов
/ 09 мая 2012

Однако есть и обратная сторона. Если вы хотите перечислить записи в порядке убывания или возрастания, вы можете просто пропустить некоторые записи. Допустим, вы ограничиваете свой возврат до 8 строк, затем запрос берет первые 8 вхождений и перечисляет их в порядке сортировки.

Следующий запрос соберет первые 8 записей в таблице, которые соответствуют вашим критериям, и отсортирует их в вашем порядке. например.

select 
    order, order_date, booked_out_date 
from 
    orderdb
where 
    booked_out_date is not null 
    and rownum <= 8 
order by 
    booked_out_date;

Следующий запрос сначала захватит все записи, которые соответствуют моим критериям, отсортирует их, а затем отобразит первые восемь заказов, забронированных в порядке дат.

Select * 
From
    (Select 
         order, order_date, booked_out_date 
     From 
         orderdb
     Where 
          booked_out_date is not null 
     Order By date)
Where 
    rownum <= 8;

Если заказы, которые были забронированы, попадают в первые восемь заказов, но их запись в таблице - т.е. 20-я запись, вы можете пропустить ее с первым запросом, но вторая заберет его.

1 голос
/ 21 декабря 2010

Во-первых, вы разбиваете на страницы и, следовательно, нуждаетесь в ограниченных строках (что является допустимым ограничителем результатов)?Вместо этого спросите себя, не является ли ваш запрос слишком далеко идущим для текущей задачи.

Как уже упоминалось, вы можете использовать rownum, чтобы ограничить набор результатов, или обернуть rownum, как показано ниже для примера разбивки на страницы:

Альтернативы LIMIT и OFFSET для подкачки в Oracle

0 голосов
/ 22 мая 2017

Это работает для меня. Вы также можете реализовать это для нумерации страниц.

SELECT
    *
FROM
    (
        SELECT
            inner_query.*,
            ROWNUM rnum
        FROM
            (
                SELECT
                    *
                FROM
                    table_name
                ORDER BY column_name
            ) inner_query
        WHERE
            ROWNUM <= 20
    )
WHERE
    rnum >= 1;

, где rownum - нет. записей и rnum - начальная позиция.

...