sql(oracle)选择前10个记录,然后是下10个,依此类推

时间:2010-10-06 03:26:25

标签: sql oracle select

我想我可能只是缺少一些明显的语法,但是什么是sql(oracle)来选择前10个记录,然后是下一个10,依此类推?

我尝试使用rownum但似乎可以获得rownum> X和rownum< Y工作。

LLCF

3 个答案:

答案 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行。只有当你可以将光标保持在提取之间时,这才有效。