[英]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.