Rownum无法正常工作

时间:2018-08-10 09:44:52

标签: oracle rownum

我有两个表X和Y。 当我在下面查询表X时运行

select * from 
( select rownum as rn, A.* from X as A order by A.IDdesc) where rn between 0 
and 1000000;

我得到的结果是

rn  Id  name 
1   1   xxx
2   2   yyy
3   4   zzz

但是对于Y表,当执行相同的查询时,我得到的结果为

select * from 
    ( select rownum as rn, A.* from Y as A order by A.IDdesc) where rn between 0 
    and 1000000;

rn  Id  name 
5   1   xxx
7   2   yyy
10  4   zzz
Y表中的

rn正在获得一些随机数。无法理解此行为。 ny的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

按照Oracle检索行的顺序,将ROWNUM伪列添加到选定的列,然后应用ORDER BY子句。您似乎想要的是先对行进行排序,然后针对此排序生成ROWNUM,但这不是您的查询所要做的。

对于表X,碰巧Oracle以与id列相同的顺序检索行。但是,对于表Y,行的检索顺序与id列不同,因此ROWNUM的顺序与行检索的顺序相同,然后应用不同的顺序,因此{{1 }}的值出现乱序。

您应该做的是在生成ROWNUM伪列之前应用ORDER BY,以使它们同步:

ROWNUM