在Oracle中从表中选择第N行

Nir*_*bey 11 sql oracle

如何从Oracle中的表中选择第N行?

我试过了

SELECT PRICE FROM AAA_PRICING WHERE ROWNUM = 2
Run Code Online (Sandbox Code Playgroud)

但那没用.请帮忙!

dav*_*vek 24

基于经典答案:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:127412348064

select * 
  from ( select a.*, rownum rnum
           from ( YOUR_QUERY_GOES_HERE -- including the order by ) a
          where rownum <= N_ROWS )
 where rnum >= N_ROWS
/
Run Code Online (Sandbox Code Playgroud)

  • 因此,深入嵌套查询3是从集合中选择单个结果的最佳方法吗?是不是有更简单的方法? (2认同)

Mic*_*sov 8

不适用于'='(将工作<2或> 2,但不相等)

所以你可以

 SELECT Price from (SELECT PRICE, ROWNUM AS RN FROM AAA_PRICING) WHERE RN = 2
Run Code Online (Sandbox Code Playgroud)


sjn*_*ngm 6

解决原因:

RowNum是Oracle提供的伪列.它是在处理SELECT子句时生成的.由于WHERE子句是 SELECT子句之前处理的,因此RowNum它还没有正确的值.

人们可以争论是否让甲骨文在情况下抛出异常是有意义的,但因为RowNum仍然是一个伪列,它仍然有效.

注意:不要混淆这个RowId,这是一个完全不同的故事!

重要编辑:

请注意,我写了一篇关于RowNum只有真正的=,>,>=,IN ()或者其他人.如果您检查,例如RowNum < 10,您只能获得9条记录!?我不知道为什么会这样!

  • “你只得到了九张记录!?” 呃,如果你开始数 1、2、3……,有多少个数字小于 10? (2认同)