您的位置:首页 > 数据库 > Oracle

Oracle实现分页的注意点

2009-06-05 16:33 316 查看
select a.*, rownum r

from (select * from
lg_order o order by o.order_id) a

where rownum <= 20

and rownum
>= 10

这句是错误的
由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件不成立,查不到记录

select a.*

from
(select *,
rownum r
from lg_order o
where rownum <=
20

) a

where a.r >= 10

对于没有排序操作的分页,这样写是对的。

select a.*

from
(select *,
rownum r

from lg_order o
where rownum <=
20

order by o.order_id
) a

where a.r >= 10

对于有排序操作的,这样写就错了,这个时候rownum 就不是你想像的了

对于sql语句 from 先执行

然后是 where

然后是select

最后是 order

在你where的时候 还没有order

这个时候rownum 是原始的rownum 不是排好顺序的rownum

所以有排序操作的应该这样写:

select *

from (select a.*, rownum r

from
(select * from lg_order o order by o.order_id) a

where rownum <=
20) b

where b.r >= 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: