一尘不染

在关键字之间使用[duplicate]时,行num不显示任何行

sql

这个问题已经在这里有了答案

ROWNUM如何在分页查询中工作? (3个答案)

1年前关闭。

当我使用 rownum 和关键字 之间时 ,查询将不返回任何行。谁能解释查询不检索任何行的原因?

select * from cus where rownum between 2 and 6;

我只想检查rownum与between关键字一起使用时是否能工作。所以,我只是尝试了上面的查询以显示2到6之间的行。但是当我尝试执行查询时,它没有检索任何行。

提前致谢


阅读 164

收藏
2021-03-17

共1个答案

一尘不染

Oracle rownum从1开始,因此如果您说,您将永远不会得到第一个rownum between 2 and N

需要一行来“初始化” rownum伪列序列,因此,通过在您的条件中消除rownum 1,可以消除所有rownum(或每行本质上具有rownum 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开始。

2021-03-17