sql (oracle) для выбора первых 10 записей, затем следующих 10 и т. д. - PullRequest
2 голосов
/ 06 октября 2010

Я полагаю, что мне может не хватать некоторого очевидного синтаксиса, но что такое sql (oracle) для выбора первых 10 записей, затем следующих 10 и т. Д.?

Я пытался использовать rownum, но может показаться,заставить работать rownum> X и rownum

llcf

Ответы [ 3 ]

13 голосов
/ 06 октября 2010

Есть только довольно запутанный способ сделать это, что является настоящей болью для Oracle. Они должны просто реализовать предложение LIMIT / OFFSET ...

rownum назначается после строка была выбрана предложением where, так что 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
3 голосов
/ 28 апреля 2011

Вы можете использовать функцию 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
0 голосов
/ 06 октября 2010

Вы также можете выбрать все строки и получить только 10 одновременно. Конечно, это работает, только если вы можете удерживать курсор между выборками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...