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