You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于使用ROWNUM查询数据库仅ROWNUM=1生效的问题咨询

为什么ROWNUM = N(N>1)查不到数据?怎么解决?

嘿,这个问题我当初刚用Oracle的时候也踩过坑!核心原因是Oracle的ROWNUM是在结果集生成的过程中逐行分配的,而且它的判断逻辑很特殊:

  • ROWNUM从1开始,只有当某一行被判定符合条件(能进入结果集)时,才会给下一行分配ROWNUM=2,以此类推。
  • 当你直接写WHERE ROWNUM = 4时,数据库会先取第一行,给它分配ROWNUM=1,发现不等于4就过滤掉;接下来的行根本不会被分配ROWNUM=2、3、4——因为没有前一行通过筛选,ROWNUM的计数就不会往下走,自然查不到任何结果。

解决办法

有两种常用的方式可以拿到你想要的第N行数据:

1. 用子查询先分配ROWNUM,再在外层筛选

把ROWNUM先作为一个列别名保存下来,再在外层查询中筛选这个别名的值,这样就能绕过ROWNUM的判断逻辑:

SELECT * 
FROM (
    SELECT t.*, ROWNUM AS rn 
    FROM MY_TABLE t
) 
WHERE rn = 4;

针对你给出的示例表,如果你想查第三行(Adam),只需要把rn = 3就行,这样就能正常返回结果了。

2. Oracle 12c及以上版本:用OFFSET...FETCH语法

Oracle 12c引入了更直观的分页语法,用这个可以直接跳过前N-1行,取第N行:

SELECT * 
FROM MY_TABLE
OFFSET 3 ROWS FETCH NEXT 1 ROW ONLY;

这里OFFSET 3 ROWS表示跳过前3行,FETCH NEXT 1 ROW ONLY表示只取接下来的1行,正好对应你要的第4行数据。

内容的提问来源于stack exchange,提问作者Yura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:27:12