我想我可能只是缺少一些明显的语法,但是什么是sql(oracle)来选择前10个记录,然后是下一个10,依此类推?
我尝试使用rownum但似乎可以获得rownum> X和rownum< Y工作。
LLCF
答案 0 :(得分:13)
只有一种相当复杂的方法可以做到这一点,这对Oracle来说真的很痛苦。他们应该只实现LIMIT / OFFSET条款......
在的where子句选择了行之后,rownum被分配,因此rownum必须始终以1开头。where rownum > x
将始终评估为false。
此外,在完成排序之前,rownum会被分配 ,因此rownum的顺序与订单的顺序不同。
您可以通过子选择来解决这两个问题:
select a,b,c, rn from
( select a,b,c, rownum rn from
( select a,b,c from the_table where x = ? order by c)
where rownum < Y)
where rn > X
如果您不需要排序(但仅限于此),您可以简化为
select a,b,c, rn from
( select a,b,c, rownum rn from the_table where rownum < Y )
where rn > X
答案 1 :(得分:3)
您可以使用ROW_NUMBER()函数...例如
SELECT *
FROM ( SELECT A.*, ROW_NUMBER( ) OVER (ORDER BY MYFIELD) AS MYROW FROM MYTABLE A )
WHERE MYROW < X
SELECT *
FROM ( SELECT A.*, ROW_NUMBER( ) OVER (ORDER BY MYFIELD) AS MYROW FROM MYTABLE A )
WHERE MYROW BETWEEN X AND Y
SELECT *
FROM ( SELECT A.*, ROW_NUMBER( ) OVER (ORDER BY MYFIELD) AS MYROW FROM MYTABLE A )
WHERE MYROW BETWEEN Y AND Z
答案 2 :(得分:0)
您也可以选择所有行,一次只能获取10行。只有当你可以将光标保持在提取之间时,这才有效。