繁体   English   中英

使用Rownum从数据库检索仅在rownum = 1时有效

[英]retrieveing from db using while Rownum works only when rownum = 1

我正在尝试根据rownum值从数据库中检索数据,

select * from MY_TABLE WHERE ROWNUM = 4

仅当rownum = 1时才给出结果,否则为空。 即使我确定我的表有更多行!

              name      age 
--------     --------  -------  
1             Joe       10     
2             Leo       3    
3             Adam      9

例如,上表我只能得到joe的信息,方法是说rownum = 1时,其他人则没有结果

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

用类似的查询

SELECT * FROM table
WHERE ROWNUM = 2

获取的第一行具有ROWNUM 1,并使where条件为false。 接下来的第二行现在是第一行,并具有ROWNUM 1,并使where条件为false, ROWNUM

假设这是您的表:

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>

或者,如果您仍然想使用“ =”(仅需要第3个值),则必须使用一个内联视图,该视图选择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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM