一个数据库,有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对上百万条数据操作,效率是不是低了点呢???哪位高人帮帮忙.
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对上百万条数据操作,效率是不是低了点呢???哪位高人帮帮忙.
FROM (SELECT ROWNUM num,T.* FROM tabA T order by SortCur Desc WHERE ROWNUM < 11) A
WHERE A.num > 4
(select rownum as rid ,t.* from (select tabA.* from tabA order by SortCur Desc)t
where rownum <= 10 )
where rid >= 5
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