使用 while rownum 从数据库检索仅当 rownum = 1 时才有效

问题描述 投票:0回答:3

我正在尝试根据 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 oracle rownum
3个回答
2
投票

假设这是你的桌子:

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>

2
投票

ROWNUM
返回一个数字,指示 Oracle 从表中选择行的顺序。第一行有
ROWNUM
1,第二行有 2 等等

使用类似的查询

SELECT * FROM table
WHERE ROWNUM = 2

获取的第一行有

ROWNUM
1,并使 where 条件为假。下一行,即第二行,现在是第一行,并且具有
ROWNUM
1,并使 where 条件为 false,等等。


0
投票

littlefoot:感谢您提供此解决方案的帮助。

效果很完美!

© www.soinside.com 2019 - 2024. All rights reserved.