一个数据库,有100万条左右数据.现在要用一个SQL语句来实现排序分页.数据表(tabA)结构如下:
PKID  SortCur
1       9
2       20
3       25
4       12
5       14
6       28
7       17
8       22
9        6   
10       1
要根据SortCur 来排序.每页5条.我用的是下面的语句.
select * from (select tabA.rownum r,tabA.* from tabA order by SortCur Desc) t where t.rownum<=5 显示的结果,按预料中的排序.
可第二页用同样的方法.
select * from (select tabA.rownum r,tabA.* from tabA order by SortCur Desc) t where t.rownum>=5 and t.rownum<=10却出现排序错乱的问题.在网上找了很多资料.都说只有一种minus集合操作才能完成.可我的数据库中有一个CLOB字段.用minus一操作,就出现错误.而且,minus对上百万条数据操作,效率是不是低了点呢???哪位高人帮帮忙.

解决方案 »

  1.   

    SELECT A.* 
    FROM (SELECT ROWNUM num,T.* FROM tabA T order by SortCur Desc WHERE ROWNUM < 11) A 
    WHERE A.num > 4
      

  2.   

    select * from 
    (select rownum as rid ,t.* from (select tabA.* from tabA order by SortCur Desc)t 
    where rownum <= 10 )
    where rid >= 5
      

  3.   

    注意:rownum只能用符号(<、<=、!=)。 
                select * from tablename where rownum != 10;返回的是前9条记录。 
                不能用:>,>=,=,Between...and。由于rownum是一个总是从1开始的伪列。只能用
    select *
    from table_name
    where rownum < N
    minus
    select *
    from table_name
    where rownum < M就可以选中 M 与 N之间的。
    或者
    select * from 
    (select rownum as rid ,t.* from (select tabA.* from tabA order by SortCur Desc)t 
    where rownum <= N )
    where rid >= M