我正在为 Oracle DB(版本 9)编写一个非常简单的查询。
不知何故,我可以得到前 5 行:
select * from cities where rownum <= 5
但是跳过 5 行会返回一个空结果:
select * from cities where rownum >= 5
使用:
为什么第二个查询返回空结果?
在 Oracle Database 12c(第 1 版)及更高版本中,您可以非常简单地执行此操作,跳过 5 行:
SELECT * FROM T OFFSET 5 ROWS
Run Code Online (Sandbox Code Playgroud)
并跳过 5 行并取 15 行:
SELECT * FROM T OFFSET 5 ROWS FETCH NEXT 15 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
您可以使用以下查询跳过前 n 行。
select * from (
select rslts.*, rownum as rec_no from (
<<Query with proper order by (If you don't have proper order by you will see weird results)>>
) rslts
) where rec_no > <<startRowNum - n>>
Run Code Online (Sandbox Code Playgroud)
上面的查询类似于下面的分页查询。
select * from (
select rslts.*, rownum as rec_no from (
<<Query with proper order by (If you don't have proper order by you will see weird results)>>
) rslts where rownum <= <<endRowNum>>
) where rec_no > <<startRowNum>>
Run Code Online (Sandbox Code Playgroud)
您的城市查询:
select * from (
select rslts.*, rownum as rec_no from (
select * from cities order by 1
) rslts
) where rec_no > 5 <<startRowNum>>
Run Code Online (Sandbox Code Playgroud)
注意:假设城市表中的第一列是唯一键