oracle中排序和分頁的相互影響

2021-08-31 09:10:24 字數 974 閱讀 5130

如下sql:

select *

from (select rownum rn_,t_.*

from (select *

from pd_model

order by add_date desc) t_

where rownum <= (70 + 10))

where rn_ >= (70 + 1)

滿足要求的記錄總共有268條,但是傳入不同的引數查詢第60到70條記錄以及第70到80條的記錄,[color=red]發現返回結果一樣[/color](268條符合條件的記錄互不相同)

在order by的後面追加id的排序後,結果符合預期(第60到70條以及第70到80條的記錄不同,並在正確的位置)

select *

from (select rownum rn_,t_.*

from (select *

from pd_model

order by add_date desc[color=red],id[/color]) t_

where rownum <= (70 + 10))

where rn_ >= (70 + 1)

問題出現的原因是由於同一add_date有很多記錄引起的

問題可以如上解決的原因等有時間再調查!!

sqlserver中,如果top關鍵字和order by關鍵字一起出現,[color=red]是先order by 後再top[/color]。也就是說:取得最前面的幾條記錄是經過排序的。

而oracle中,如果使用where rownum<=n和order by一起出現的話,[color=red]rownum優先於order by[/color]。也就是說,order by無法對所有滿足條件的記錄排序,只能對當前的rownum<=n中的n條記錄排序。

在儲存過程中排序分頁

在專案中,會遇到查詢出的結果排序分頁的問題,可以有多種解決方法,乙個是利用開發工具提供的方法,例如.net visual studio中的gridview,就提供了排序,分頁功能。但如果情況複雜,我們可以把排序分頁放到儲存過程來完成。以乙個簡單例子來說明問題 table reportfile fie...

Oracle資料庫中分頁查詢中排序及效率問題

原始未分頁查詢sql 如下 select rownum rn,t.id id,o.name yyb,u.name xm,t.mc from tzdysx t,tuser u,lborganization o wheret.cjr u.id and u.orgid o.orgcode andt.gx ...

Oracle中排序後查詢20 40資料

第一種方法 select from select t.rownum tt from select from sup doc feedback order by web doc id t where rownum 41 r where r.tt 20 第二中方法 select from select ...