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

时间:2018-04-17 05:33:39

标签: sql oracle rownum

我正在尝试根据rownum值

从数据库中检索数据
select * from MY_TABLE WHERE ROWNUM = 4

它只在rownum = 1时给出结果,否则为空。即使我确定我的桌子有更多的行!

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

例如上面的表我只能得到乔的信息,说rownum = 1,其他人只是没有结果

2 个答案:

答案 0 :(得分:2)

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

使用类似

的查询
SELECT * FROM table
WHERE ROWNUM = 2

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

答案 1 :(得分: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>

或者,如果您仍然想要使用“=”(因为您只需要第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>