子句之间的行数不起作用-Oracle

时间:2019-05-31 10:43:23

标签: sql oracle rownum

我有一张桌子:

表1

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;

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

rownum随着生成结果集的增加而增加。如果永远不会生成值“ 1”,那么就永远不会生成“ 2”。

由于要返回行号,我建议使用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;

答案 1 :(得分:1)

要返回的第一行的编号为1。
这不符合条件,因此不会返回。
每行都适用相同的条件。
因此,将不返回任何行。