子句之间的 Rownum 不起作用 - Oracle [重复]
Posted
技术标签:
【中文标题】子句之间的 Rownum 不起作用 - Oracle [重复]【英文标题】:Rownum between clause not working - Oracle [duplicate] 【发布时间】:2019-05-31 10:43:23 【问题描述】:我有一张桌子:
表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;
我做错了什么?
【问题讨论】:
@Kaushik Nayak 我不认为这是引用的重复。 @BarbarosÖzhan :我添加了另一个几乎完全相同的。 @KaushikNayak,谢谢 :) 【参考方案1】: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;
【讨论】:
如果我不指定order by,Oracle会给我不同的结果吗? @dang 。 . .如果您不指定order by
,则结果集中的行的顺序是不确定的,并且可能因运行而异。【参考方案2】:
要返回的第一行编号为 1。 这不符合条件,因此不会被退回。 相同的标准适用于每一行。 因此,不会返回任何行。
【讨论】:
以上是关于子句之间的 Rownum 不起作用 - Oracle [重复]的主要内容,如果未能解决你的问题,请参考以下文章
带有日期字符串的 Android SQLite rawquery 在 WHERE 子句中不起作用