SQL分页查询
我有以下SQL结构:SQL分页查询,sql,oracle,Sql,Oracle,我有以下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 WHER
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改为WHERE ROWNUM beeew startRecord和endRecord,我会得到相同的结果
有人知道这里发生了什么?注意:我假设第一个条件是ROWNUM
SELECT * FROM employees
WHERE ROWNUM > 1;
获取的第一行被指定为ROWNUM 1,并使
条件为假。要提取的第二行现在是第一行,并且
还将ROWNUM指定为1,并使条件为false。所有行
随后无法满足条件,因此不返回任何行
在Oracle 12c中,您可以使用OFFSET/FETCH NEXT。在早期版本中,您可以使用带有偏移量的行数或嵌套查询。注意:我假设第一个条件实际上是ROWNUM
SELECT * FROM employees
WHERE ROWNUM > 1;
获取的第一行被指定为ROWNUM 1,并使
条件为假。要提取的第二行现在是第一行,并且
还将ROWNUM指定为1,并使条件为false。所有行
随后无法满足条件,因此不返回任何行
在Oracle 12c中,您可以使用OFFSET/FETCH NEXT。在早期版本中,您可以使用带有偏移量的行数查询或嵌套查询。这里的示例有ROWNUM