Строго говоря, в DB2 нет эквивалента TOP N.
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1)
FETCH FIRST ROW ONLY
компилируется и запускается, но
SELECT 1 FROM sysibm.sysdummy1
WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
не скомпилируется.
TOP N
и FETCH FIRST N
- это не одно и то же. Вы можете использовать FETCH FIRST
только один раз для запроса , тогда как TOP N
можно использовать в любом суб-выборе .
Вы можете использовать оконную функцию в подзапросе для симуляции TOP N
:
select *
from (
select id, row_number()
over (order by id) as rn
from testsch.testtbl
) as r
where r.rn < 100 -- This is N rows you are looking for
Это вернет ровно 99 строк. Я попробовал это в iSeries 7, и это сработало.