使用 while Rownum 从 db 中检索仅在 rownum = 1 时有效

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

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

select * from MY_TABLE WHERE ROWNUM = 4

只在rownum = 1时给出结果,否则为空。尽管我确定我的 table 有更多行!

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

比如上面的table我只能得到joe的信息,说while rownum = 1,其他的就没有结果

ROWNUM returns 一个数字,表示 Oracle select 来自 table 的行的顺序。第一行有 ROWNUM 1,第二行有 2 等等

查询如

SELECT * FROM table
WHERE ROWNUM = 2

获取的第一行有 ROWNUM 1,并使 where 条件为假。下一行,第二行,现在是第一行并且有 ROWNUM 1,并使 where 条件为假,等等

假设这是你的 table:

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>