【问题标题】:sql (oracle) to select the first 10 records, then the next 10, and so onsql (oracle) 选择前 10 条记录,然后选择下 10 条,依此类推
【发布时间】:2011-04-21 14:58:14
【问题描述】:

我想我可能只是遗漏了一些明显的语法,但是选择前 10 条记录,然后是接下来的 10 条记录的 sql (oracle) 是什么?

我尝试使用 rownum,但似乎可以让 rownum > X 和 rownum

llcf

【问题讨论】:

    标签: sql oracle select


    【解决方案1】:

    您可以使用 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】:

      您还可以选择所有行,并且一次只获取 10 行。当然,这只有在您可以将光标保持在提取之间时才有效。

      【讨论】:

        【解决方案3】:

        只有一种相当复杂的方法可以做到这一点,这对 Oracle 来说是一个真正的痛苦。他们应该只实现一个 LIMIT/OFFSET 子句...

        在 where 子句选择行之后分配 rownum,因此 rownum 必须始终以 1 开头。where rownum &gt; 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
        

        【讨论】:

          猜你喜欢
          • 2011-01-24
          • 2010-09-15
          • 2012-06-21
          • 2011-10-17
          • 2012-03-26
          • 2020-03-12
          • 1970-01-01
          • 2016-08-16
          • 1970-01-01
          相关资源
          最近更新 更多