首页 > 解决方案 > 带偏移量的查询返回重叠的数据集

问题描述

最初尝试获取非常简单的分页,使用 fetch n 行,然后使用偏移量进行后续调用,在 Oracle 中给出了重叠的条目。

我期待以下内容能给我两组独特的结果。如果第一行的限制设置为 200,则会返回 1-100 和 101-200 的结果。

select  * from "APPR" /*+ index(APPR APPR_IDX01) */ where  ("APPROVER" = 'A') or  ("APPROVER" > 'A') order by "APPROVER"  fetch first 100 rows only ;

select  * from "APPR" /*+ index(APPR APPR_IDX01) */ where  ("APPROVER" = 'A') or  ("APPROVER" > 'A') order by "APPROVER" offset 100 rows fetch next 100 rows only ;

因此,如果审批者 A 有 150 个项目,那么第一个结果应该是:

随后的调用(偏移 100)给出

不幸的是,第二组包含来自第一批值的一些条目。可能是一个非常愚蠢的错误,但我找不到为什么会发生这种情况的解释。

---- 由于评论而更新主键由 Approver 和其他几个字段组成,它们共同构成一个复合且唯一的主键。

该代码将通过 ODBC 调用,并将用于 Oracle 和 MySQL 后端。

标签: mysqlsqloracleoffsetsql-limit

解决方案


在 Oracle 中,如果你对包含相同值的列进行“排序”(就像你有 - 'A'、'A'、'A' ...),'A' 值内的记录顺序将是随机的。

请尝试将您的查询更改为 ... order by "APPROVER", rowid...


推荐阅读