我有一张表Table1
Name Date
A 01-jun-2010
B 03-dec-2010
C 12-may-2010
当我使用以下查询查询此表时
select * from table1 where rownum=1
我的输出为
Name Date
A 01-jun-2010
但是当我使用以下查询时,我没有得到任何输出。
select * from table1 where rownum=2
select * from table1 where rownum=3
有人请指导我为什么这样做,以及如何使用rownum。
答案 0 :(得分:4)
Tom可以解答许多与Oracle相关的问题
简而言之,在应用where子句之后和应用order by子句之前,rownum可用。
在RowNum = 2的情况下,where子句中的谓词永远不会评估为true,因为RowNum从1开始,只有在找到与谓词匹配的记录时才会增加。
答案 1 :(得分:2)
(无论如何都不是Oracle专家)
根据我的理解,rownum为结果集中的行编号。
所以,在你的例子中:
select * from table1 where rownum=2
结果集中会有多少行?因此,什么rownum将分配给这样一行?你现在能看到为什么没有实际返回结果吗?
通常,您应该避免依赖于rownum或任何暗示订单结果的功能。试着考虑使用整套结果。
话虽如此,我相信以下内容可行:
select * from (select rownum as rn,table1.* from table1) as t where t.rn = 2
因为在这种情况下,您要对子查询中的行进行编号。
答案 2 :(得分:2)
添加rownums是从数据库中提取结果集后最后完成的事情之一。这意味着第一行将始终具有rownum 1.当您想要限制结果集时,例如在进行分页时,最好使用Rownum。
有关详情,请参阅此处:http://www.orafaq.com/wiki/ROWNUM