我有两个表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的帮助将不胜感激。
答案 0 :(得分:1)
按照Oracle检索行的顺序,将ROWNUM
伪列添加到选定的列,然后应用ORDER BY
子句。您似乎想要的是先对行进行排序,然后针对此排序生成ROWNUM
,但这不是您的查询所要做的。
对于表X,碰巧Oracle以与id
列相同的顺序检索行。但是,对于表Y,行的检索顺序与id
列不同,因此ROWNUM
的顺序与行检索的顺序相同,然后应用不同的顺序,因此{{1 }}的值出现乱序。
您应该做的是在生成ROWNUM
伪列之前应用ORDER BY
,以使它们同步:
ROWNUM