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
<script type="text/JavaScript">
</script> <script src="http://a.alimama.cn/inf.js" type="text/javascript"></script>