在使用 Oracle 12c 并实现分页时,我在与和ORDER BY
结合使用时遇到了一个问题。OFFSET
FETCH NEXT <X> ROWS ONLY
例子
我的测试表test
:
+----+---------------------+
| ID | NAME |
+----+---------------------+
| 1 | Customer Support |
| 2 | Property Management |
| 3 | Security |
| 4 | Security |
| 5 | Security |
| 6 | Security |
| 7 | Tax Compliance |
+----+---------------------+
我正在运行以下 SQL:
SELECT id
FROM test
ORDER BY name ASC
OFFSET <offset> ROWS
FETCH NEXT 1 ROWS ONLY;
有了这些结果:
+--------+--------+-----------------+
| Offset | Result | Expected result |
+--------+--------+-----------------+
| 0 | 1 | 1 |
| 1 | 2 | 2 |
| 2 | 3 | 3 |
| 3 | 4 | 4 |
| 4 | 4 | 5 |
| 5 | 4 | 6 |
| 6 | 7 | 7 |
+--------+--------+-----------------+
问题
问题是为什么数据库没有返回预期的结果?
当没有ORDER BY
使用它时,它可以完美地工作。是否禁止此类使用?我用错了吗?如果是这样,您能否将我指向文档,其中说这种用法是不可能的。我使用的版本是 12c,但同样的行为适用于 19c。
更多示例查询
仅查询OFFSET
:
SELECT id
FROM test
ORDER BY name ASC
OFFSET 4 ROWS;
结果:
+----+
| ID |
+----+
| 5 |
| 6 |
| 7 |
+----+
OFFSET
使用和查询FETCH NEXT 1 ROWS ONLY
:
SELECT id
FROM test
ORDER BY name ASC
OFFSET 4 ROWS
FETCH NEXT 1 ROWS ONLY;
结果:
+----+
| ID |
+----+
| 4 |
+----+
谢谢
亚当