首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL分页查询

SQL分页查询
EN

Stack Overflow用户
提问于 2017-10-17 21:17:02
回答 1查看 99关注 0票数 0

我有以下SQL结构:

代码语言:javascript
复制
SELECT * FROM (
    SELECT subquery.* FROM (
        SELECT some_columns
        FROM some_tables
        WHERE junctions_critereas
        GROUP BY some_columns
      UNION
        SELECT some_columns
        FROM some_tables
        WHERE junctions_critereas
        GROUP BY some_columns) subquery
    GROUP BY some_columns)
WHERE ROWNUM > startRecord AND ROWNUM <= endRecord;
  • 如果排除ROWNUM标准,查询将返回33条记录。
  • 如果我将startRecord =0和endRecord = 10放在一起,查询将返回10条第一条记录。
  • 如果我将startRecord =0和endRecord = 20放在一起,查询将返回20个第一条记录。
  • 如果我将startRecord =0和endRecord = 40放在一起,查询将返回所有33条记录。
  • 如果我将startRecord = 10和endRecord = 20放在一起,查询就不会返回任何记录。

如果我将最终位置更改为WHERE ROWNUM BETEEW startRecord AND endRecord,则得到相同的结果。

有人知道这里发生了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2017-10-17 21:31:58

(注:正如@RToyota在评论中指出的那样,我假设第一个条件是ROWNUM < startRecord。)

甲骨文文档对此非常清楚:

对于大于正整数的ROWNUM值的条件测试始终是假的。例如,此查询不返回任何行: 从ROWNUM >1的员工中选择*; 获取的第一行被分配为1的ROWNUM,并使条件为false。要获取的第二行现在是第一行,并且分配给ROWNUM为1并使条件为false。所有行随后都不能满足条件,因此不返回任何行。

在Oracle12c中,可以使用OFFSET/FETCH NEXT。在早期版本中,可以使用带有偏移的row_number()查询或嵌套查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46799355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档