2010-12-21 86 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是开始位置。