[Oracle] ROWNUM和分页(2)

从上面的结果我们不难发现,根据name排序,有多条数据并列排在第3位,这样,当取前5名时,到底在并列第3中取哪几位就不是确定的事,因此就出现了之前出现的诡异的问题。那么,怎样才能彻底解决这个问题呢?其实只要在order by name后面加上rowid,保证不会出现并列的情况就可以了,如下所示:

select * from (select * from test order by name,rowid) where rownum<=5;

ID NAME
---------- --------------------
        1 A
        2 B
        3 C
        4 C
        8 C
select T.* from (select t.*,rownum rn from (select * from test order by name,rowid) t where rownum<=10) T where T.rn>5;

ID NAME                        RN
---------- -------------------- ----------
        5 C                            6
        7 C                            7
        6 C                            8
        10 D                            9
        9 D                            10

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/502697046add7ff849b3161a4e676d8c.html