我有一张桌子:
表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;
我在做什么错了?
答案 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。
这不符合条件,因此不会返回。
每行都适用相同的条件。
因此,将不返回任何行。