我正在尝试根据 rownum 值从数据库检索数据,
select * from MY_TABLE WHERE ROWNUM = 4
仅当 rownum = 1 时才给出结果,否则为空。即使我确定我的桌子有更多行!
name age
-------- -------- -------
1 Joe 10
2 Leo 3
3 Adam 9
例如上表,我只能通过说 while rownum = 1 来获取 Joe 的信息,其他的则没有给出任何结果。
假设这是你的桌子:
SQL> select * from my_table;
NAME AGE
-------------------- ----------
Joe 10
Leo 3
Adam 9
Yura 1
ROWNUM
不能与“=”符号一起使用(Nishant Gupta 告诉你原因):
SQL> select * from my_table where rownum = 3;
no rows selected
SQL>
但是,您可以使用“<=":
SQL> select * from my_table where rownum <= 3;
NAME AGE
-------------------- ----------
Joe 10
Leo 3
Adam 9
SQL>
或者,如果您想使用“=”(因为您只需要第三个值),则必须使用选择
ROWNUM
(并将其别名为“RN” - 例如)的内联视图带有 ORDER BY
子句,例如
SQL> select name, age
2 from (select rownum rn, name, age
3 from my_table
4 order by age
5 )
6 where rn = 3;
NAME AGE
-------------------- ----------
Adam 9
SQL>
或者,使用
ROW_NUMBER
分析函数:
SQL> select name, age
2 from (select name, age, row_number() over (order by age) rn
3 from my_table
4 )
5 where rn = 3;
NAME AGE
-------------------- ----------
Adam 9
SQL>
ROWNUM
返回一个数字,指示 Oracle 从表中选择行的顺序。第一行有 ROWNUM
1,第二行有 2 等等
使用类似的查询
SELECT * FROM table
WHERE ROWNUM = 2
获取的第一行有
ROWNUM
1,并使 where 条件为假。下一行,即第二行,现在是第一行,并且具有 ROWNUM
1,并使 where 条件为 false,等等。
littlefoot:感谢您提供此解决方案的帮助。
效果很完美!