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;
我有一个 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;