Rownum between 子句不起作用 - Oracle

Rownum between clause not working - Oracle

我有一个 table:

table1

user_id
1
2
3
4

当我运行这个查询时:

SELECT 
rownum, user_id
FROM 
table1 where rownum between 1 and 4;

但是当我运行时,它不起作用:

SELECT 
rownum, user_id
FROM 
table1 where rownum between 2 and 4;

我做错了什么?

return 的第一行编号为 1。
这不符合标准,因此不会 returned。
每一行都适用相同的标准。
因此,不会 return 编辑任何行。

rownum 随着结果集的生成递增。如果从未生成值“1”,则永远不会生成“2”。

因为你想要return行号,我建议使用row_number():

select seqnum, user_id
from (select t1.*, row_number() over (order by ?) as seqnum
      from table1 t1
     ) t1
where seqnum between 2 and 4;

? 用于指定结果集顺序的列。

SQL 表表示 无序 集。所以你的原始查询在功能上等同于:

select (1 + rownum), userid
from table1
where rownum <= 3;

因为没有指定顺序。通过指定的顺序,您可以使用 row_number().

在 Oracle 12C+ 中,您还可以表示为:

select rownum, userid
from table1
offset 1 row fetch first 3 rows only;