这个问题已经在这里有了答案 :
ROWNUM如何在分页查询中工作? (3个答案)
1年前关闭。
当我使用 rownum 和关键字 之间时 ,查询将不返回任何行。谁能解释查询不检索任何行的原因?
select * from cus where rownum between 2 and 6;
我只想检查rownum与between关键字一起使用时是否能工作。所以,我只是尝试了上面的查询以显示2到6之间的行。但是当我尝试执行查询时,它没有检索任何行。
提前致谢
Oracle rownum从1开始,因此如果您说,您将永远不会得到第一个rownum between 2 and N。
between 2 and N
需要一行来“初始化” rownum伪列序列,因此,通过在您的条件中消除rownum 1,可以消除所有rownum(或每行本质上具有rownum 0)。
0
这样看。在数据库向您返回一行之前,您不会得到ROWNUM。任何条件的第一行将始终为ROWNUM 1。
现在,您可以使用的技巧是使用子查询。每个子查询将具有其自己的rownum,如果将其别名为另一个列名,则可以将其保留在外部查询中,并根据需要对其进行处理。因此,如果要实现对结果集的分页,通常会将rownum从内部结果作为rownum_别名到外部子查询,以使用BETWEEN进行限制。
select * from (select t.*, rownum as rownum_ from t) where rownum_ between 2 and 6
但是请注意,外部结果集将具有其自己的rownum,因此您可以执行以下操作:
select t2.*, rownum from (select a, b, rownum as rownum_ from t) t2 where rownum_ between 2 and 6
您会看到rownum最终结果仍然从1开始,但是内部结果将从rownum_2开始。
rownum
rownum_