2010-12-21 84 views
2

如何限制ORACLE查詢返回的記錄數?如何限制ORACLE查詢返回的記錄數量?

and

您認爲哪種方式最好?

+1

http://stackoverflow.com/questions/2912144/alternatives-to-limit-and-offset-for-paging-in-oracle – 2010-12-21 16:33:39

+0

頁面上的第一個鏈接,你給我 - 不工作 – user471011 2010-12-21 16:43:30

回答

6

在查詢結尾處添加「where rownum < =條目數量」。

1

首先,你是分頁,因此需要有限的行(這是一個有效的結果限制)?相反,問問你自己,如果你的查詢對於手頭的任務來說太過深遠。

如前所述可以使用rownum來限制結果集,或如以下的rownum包裹用於分頁的示例:

Alternatives to LIMIT and OFFSET for paging in Oracle

2

然而有一個缺點此。當你想以降序或升序列出記錄時,你可能會錯過一些記錄。假設您將返回限制爲8行,那麼查詢將首先發生8次並按排序順序列出。

以下查詢將抓取符合條件的表中的第1 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; 

如果預訂的訂單落在前8個訂單內,但其表中的記錄是ie。第20條記錄,你可能會錯過它的第一個查詢,但第二個記錄會檢索它。

3

由於Oracle 12c,您還可以使用fetch first row only

第一行:

select * from example fetch first row only; 

前10行:

select * from example fetch first 10 rows only; 
0

這是爲我工作。你也可以實現這個分頁。

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是開始位置。