子句之间的 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 子句中不起作用

oracle数据库访问order by不起作用分析

oracle SQL语句中结合order by子句使用rownum

Spark JDBC伪列不起作用

使用 WHERE 子句的查询不起作用

Sql where子句不起作用