首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从salary where rownum=3;中选择rownum;

从salary where rownum=3;中选择rownum;
EN

Stack Overflow用户
提问于 2010-08-11 18:25:50
回答 4查看 9.8K关注 0票数 0

如何使用"rownum“关键字从任何表中检索第三行(我使用的是oracle-10g)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-11 18:56:14

当查询产生行时,Oracle按顺序为ROWNUM赋值-因此,获取的第一行获取ROWNUM=1,获取的第二行获取ROWNUM=2,获取的第三行获取ROWNUM,依此类推。注意,对于要分配给ROWNUM的行,必须先获取前面的两行。这就是您的查询不返回任何行的原因。您正在向数据库请求获取的第三行--但是第1行和第2行从未被获取过。

要进行演示,请尝试运行以下查询:

代码语言:javascript
复制
SELECT S.* FROM SALARY S;          -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S;  -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3;  -- Should return no rows

要解决您的问题,请尝试以下操作:

代码语言:javascript
复制
SELECT ROW_NUMBER FROM
  (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
  WHERE ROW_NUMBER = 3;

分享和享受。

票数 12
EN

Stack Overflow用户

发布于 2010-08-11 18:33:31

你可以像这样使用need to do命令

代码语言:javascript
复制
select rnum,sal
  from  
( select sal, rownum rnum

    from salary 
   order by sal desc ) 
 where rnum = 3;

直到谓词阶段之后才会赋值rownum,因此rownum = 3将始终为false。使用CTE或派生表,然后可以从外部访问rownum

票数 3
EN

Stack Overflow用户

发布于 2012-10-24 19:18:00

代码语言:javascript
复制
SELECT ROW_NUMBER FROM   (SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)   WHERE ROW_NUMBER = 3; 

这是不正确的。这将始终返回“3”,因为您选择的是ROW_NUMBER。

应该是"select *",如下所述:

代码语言:javascript
复制
select * from (select rownum as row_number, s.* from salary s) where row_number = 3;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3457370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档