在 oracle 中限制记录时如何避免 rownum 作为列?
How can i avoid rownum as a column when limiting records in oracle?
当我 运行 查询时:
select *
from ( select a.*,
ROWNUM rnum
from ( select *
from test
order by null ) a
where ROWNUM <= 2000 )
where rnum >=1
我将所有列连同 rownum 作为我不想要的单独列,如何实现这个或有什么方法可以限制记录?
由于最终过滤器是针对 ROWNUM >= 1
(这将始终为真),您可以消除它并只使用:
select *
from (
select *
from test
order by null
)
where ROWNUM <= 2000
(注意:ORDER BY NULL
将应用非确定性排序。)
如果您想指定不同的起始行,则需要指定您想要的列 return:
select col_1,
col_2,
-- ...
col_n
from (
select a.*,
ROWNUM rnum
from (
select *
from test
order by null
) a
where ROWNUM <= 2000
)
WHERE rnum > 1000
在 Oracle 12c 中您可以使用:
SELECT *
FROM test
ORDER BY NULL
FETCH FIRST 2000 ROWS ONLY;
或
SELECT *
FROM test
ORDER BY NULL
OFFSET 1000 ROWS FETCH NEXT 1000 ROWS ONLY;
当我 运行 查询时:
select *
from ( select a.*,
ROWNUM rnum
from ( select *
from test
order by null ) a
where ROWNUM <= 2000 )
where rnum >=1
我将所有列连同 rownum 作为我不想要的单独列,如何实现这个或有什么方法可以限制记录?
由于最终过滤器是针对 ROWNUM >= 1
(这将始终为真),您可以消除它并只使用:
select *
from (
select *
from test
order by null
)
where ROWNUM <= 2000
(注意:ORDER BY NULL
将应用非确定性排序。)
如果您想指定不同的起始行,则需要指定您想要的列 return:
select col_1,
col_2,
-- ...
col_n
from (
select a.*,
ROWNUM rnum
from (
select *
from test
order by null
) a
where ROWNUM <= 2000
)
WHERE rnum > 1000
在 Oracle 12c 中您可以使用:
SELECT *
FROM test
ORDER BY NULL
FETCH FIRST 2000 ROWS ONLY;
或
SELECT *
FROM test
ORDER BY NULL
OFFSET 1000 ROWS FETCH NEXT 1000 ROWS ONLY;