sql - 如果测试 rownum 的值大于 100,则表 rownum 返回 0 条记录

标签 sql database oracle join oracle11g

<分区>

Possible Duplicate:
Rownum not working with query

我正在对 rownum 的工作原理进行一些测试。请有人解释以下查询的输出——特别是为什么第三个查询返回 0 行。

查询 1 - 返回 2456 行

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id);

查询 2 - 返回 100 行

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id)
where rownum between 1 and 100;

查询 3 - 返回 0 行

Select rownum, s.id, s.title, sv.version_id
from software s JOIN software_version sv on (s.id = sv.id)
where rownum between 101 and 400;

谢谢

最佳答案

rownum 仅在提取行和评估其他谓词后才评估。这是关键。所以如果你说 select * from table where rownum >= 2;

它永远无法工作,因为它工作得像

open cursor loop
  fetch row (rownum is evaluated as the last thing here)
    if fetched then rownum = rownum + 1
end cursor

如果您请求从 > 1 开始的 rownum,那么它永远不会为真。做分页如果你需要你必须这样编码

select *
  from (select rownum r, t.*
          from your query tables
         order by ..)
 where r>=101 
   and rownum <= 400

也可以在此处阅读更多信息 ask tom

关于sql - 如果测试 rownum 的值大于 100,则表 rownum 返回 0 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351318/

相关文章:

c# - 在前端获取 "Top clause contains invalid value"错误,但在 SQL 数据中清晰可见

java - Java中的SQL CREATE和SELECT处理模拟

sql - 为防止插入的sqlite数据库创建触发器

java - 在 jdbc 调用中一次减少提交和插入批量记录?

sql - Oracle 查询显示错误 "not a GROUP BY expression"

sql - Oracle SQL - 在不知道列名的情况下选择列

mysql - 这个防止空日期的 MySQL 触发器有什么问题?

sql - postgresql函数-获取受更新查询影响的行数

javascript - 从 SQLite 中提取数据

android.database.sqlite.SQLiteException : unrecognized token: