ORACLE分頁查詢出現重覆記錄的解決辦法

2021-06-25 10:06:30 字數 1778 閱讀 9637

今天在用

oracle分頁查詢資料的時候出現了重複資料,有的資料無法查出,很鬱悶,想了想,找了資料,發現問題

分頁語句:

sql** 

select 

*  

from 

( select 

row_.*, 

rownum rownum_  

from 

(  

select bb.*from( 

select 

bw.id, 

bw.nick_name, 

bw.is_vip, 

bw.fans_num, 

bw.blog_num, 

bwm.image_urls, 

bwm.image_type  

from 

bw_user bw  

left join 

bw_use***ce_image bwm  

on bw.headimgid=bwm.id  ) bb  

order by bb.fans_num desc   ) row_  

where 

rownum <= 10 

)  

where 

rownum_ > 0 

這樣查詢的時候出現了重複資料

原因:fans_num 這個欄位是不固定的,也就是說是動態的,隨時都可能在改變,導致資料出現重複,如果這個欄位是固定的,就不會出現重複資料

解決辦法:如果不能確定排序欄位是唯一的,必須新增另外乙個排序字段,該欄位最好是唯一索引鍵

sql** 

select 

*  

from 

( select 

row_.*, 

rownum rownum_  

from 

(  

select bb.*from( 

select 

bw.id, 

bw.nick_name, 

bw.is_vip, 

bw.fans_num, 

bw.blog_num, 

bwm.image_urls, 

bwm.image_type  

from 

bw_user bw  

left join 

bw_use***ce_image bwm  

on bw.headimgid=bwm.id  ) bb  

order by bb.fans_num desc ,bb.id desc 

) row_  

where 

rownum <= 10 

)  

where 

rownum_ > 0 

在裡面新增了id排序,id是主鍵,是唯一的,就不會重現重複資料了

注:如果排序的第乙個字段(fans_num)改變的比較快,還是可能出現重複資料的,只是概率比較小

鬱悶了一上午,終於知道弄出來了,以前排序都沒注意到這個問題

select * from (

select a.*, rownum rn

from (select * from table_name) a

where rownum <= n)

where rn > m

這裡的rownum是乙個偽列,它是oracle為查詢結果所編的乙個號,第一行的 rownum為1,第二行為2,以此類推。

oracle分頁出現重複資料

如果order by的排序欄位的內容不是唯一的。例如你按錄入日期 lrrq 排序 即 order by col date 而col date又只是 yyyy mm dd 的格式而不是時間戳的格式的話,你的排序欄位不唯一 有可能兩條以上的資料錄入日期都是 2008 11 26 在分頁的時候第一頁的內容...

資料庫問題 oracle查詢出現重複資料

select from select row rownum rownum from select from pg jdlk match result this row where rownum where rownum 資料量不是一條兩條,而是很多條,需要分頁顯示,而上面這個sql語句是最常用的分頁...

oracle分頁查詢資料重複問題

在oracle分頁查詢中,我們採用類似以下所示的公認的比較高效的資料庫分頁查詢語句 effective oracle by design中有描述 眾多oracle使用者也做過測試 寫道 select from select a.rownum rn from select from table nam...