我有以下SQL结构:
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;如果我将最终位置更改为WHERE ROWNUM BETEEW startRecord AND endRecord,则得到相同的结果。
有人知道这里发生了什么吗?
发布于 2017-10-17 21:31:58
(注:正如@RToyota在评论中指出的那样,我假设第一个条件是ROWNUM < startRecord。)
甲骨文文档对此非常清楚:
对于大于正整数的ROWNUM值的条件测试始终是假的。例如,此查询不返回任何行: 从ROWNUM >1的员工中选择*; 获取的第一行被分配为1的ROWNUM,并使条件为false。要获取的第二行现在是第一行,并且分配给ROWNUM为1并使条件为false。所有行随后都不能满足条件,因此不返回任何行。
在Oracle12c中,可以使用OFFSET/FETCH NEXT。在早期版本中,可以使用带有偏移的row_number()查询或嵌套查询。
https://stackoverflow.com/questions/46799355
复制相似问题