задачка по SQL (DB2)
Или его вообще там не?
если есть, то : limit N, M;
limit - фича MySQL, сделанная специально для такой задачи
lf вродда в sybase есть....
Но мб там есть какие-нибудь встроенные средства...
select * from TEST limit 5,10
DBA2191E SQL execution error.
com.ibm.db.DataException: Ошибка
менеджера баз данных. : [IBM][CLI Driver][DB2/NT] SQL0104N An
unexpected token "* from TEST limit" was found
following "select ". Expected tokens may include: "<space>".
SQLSTATE=42601
но эти варианты не катят, нужно именно то, что я написал в первом посте
link):
IBM предлагает делать так (SELECT * FROM (SELECT NAME, rownumber OVERпохоже лучше не получится
(ORDER BY NAME)
AS rn FROM ADDRESS)
AS tr WHERE rn BETWEEN 11 and 20
limit - фича MySQL, сделанная специально для такой задачину хз... в постгресе есть
хотя DB2 - то ещё счастье
select ... from .. limit N offset 8
У этих пид%ров нету побитовых операций
в постгресе естьхм... не знал
ну по крайней мере в Oracle и DB2 нету
В Оракле курсор есть, с ним эта задача тоже решается.
следующий вопрос:
как быстрее? мне кажется, что на очень длинной табличке вложенные select'ы будут быстрее, чем fetch'ить дох@#я записей
как быстреетут умные люди говорят что-то про индексы
В Оракле курсор есть, с ним эта задача тоже решаетсяКстати, а как это грамотно сделать?
Просто когда мне нужны записи от N до М, делаю так
при открытии курсора ставлю условие RowNum<M
потом в цикле до N фетчу этот курсор
и уже после этого возвращаю его в Яву
а нельзя ли обойтись без этой кучи фетчей?
SELECT * FROM T
WHERE (SELECT COUNT(*) FROM T AS T1 WHERE T1.id < T.id) BETWEEN N*M AND (N+1)*M-1
но почти в каждой БД есть какие-нибудь расширения для оптимизации подобного запроса, ибо в приведенном примере речь о производительности не идет...
P.S. На MS-SQL можно поизвращаться с TOP (не годится для процедур, так как нельзя передать параметр в TOP) и курсорами.
а нельзя ли обойтись без этой кучи ...life is shit
Особенно если учесть, что если данные меняются, то большая часть предложенных способов будут себя вести странно при переходе со страницы на страницу
ну надо заметить, что и в этом форуме так происходит
Оставить комментарий
sergei1969
есть запрос, который вытаскивает записи из таблицы по условию и выводит их спискомнужно организовать постраничный вывод списка с перемещением по страницам по номеру, соответственно нужно добавить какое-то условие, которое ограничит выборку записями с (N*M)-й по (N+1)*M, где N - номер страницы, M - кол-во записей на страницу.
как это сделать в DB2 ?
p.s. знаю, что там есть конструкция fetch first M records, но пока с ней ниего хорошего не придумал