卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

解決oracle數(shù)據(jù)庫分頁中order by后數(shù)據(jù)重復問題

在開發(fā)系統(tǒng)軟件時,經(jīng)常會使用oracle數(shù)據(jù)庫分頁查詢。然而,最近我發(fā)現(xiàn)即使分頁sql組裝正確,每次點擊下一頁顯示的數(shù)據(jù)都是一樣的。本文將簡要介紹解決此問題的思路。分頁sql示例我的分頁sql如下所示

在開發(fā)系統(tǒng)軟件時,經(jīng)常會使用oracle數(shù)據(jù)庫分頁查詢。然而,最近我發(fā)現(xiàn)即使分頁sql組裝正確,每次點擊下一頁顯示的數(shù)據(jù)都是一樣的。本文將簡要介紹解決此問題的思路。

分頁sql示例

我的分頁sql如下所示:

```sql

select *

from(

select rownum rowno, tt.*

from(

select a.*

from ...

where ...

order by ..., lrsj

) tt

where rownum < n1

) table_alias

where table_ > n2

```

在查詢過程中,n1和n2的配置為20、11,30、21,40、31等時,查詢出的數(shù)據(jù)會有重復。

問題分析

經(jīng)過分析發(fā)現(xiàn),根據(jù)jgdm排序后,當jgdm相同的數(shù)據(jù)有很多個時,并沒有給它一個排序規(guī)則。也就是說,不能保證每次分頁查詢時的記錄的rownum一致。因此得到的數(shù)據(jù)也不是我們預想的。經(jīng)過測試,的確如此。

解決方法一:修改order by字段

第一種解決方法是修改select語句后的order by字段,使排序規(guī)則有效。比如,可以首先按機構(gòu)排序,然后按主鍵排序,或者干脆按rowid排序。不過后者可能沒有什么業(yè)務含義。由于是生產(chǎn)環(huán)境,不便于修改程序,因此我沒有采用此方法解決。

解決方法二:修改排序字段數(shù)據(jù)內(nèi)容

第二種解決方法是修改排序字段的數(shù)據(jù)內(nèi)容。由于排序字段數(shù)據(jù)重復,導致排序結(jié)果無規(guī)則。為了先解決問題,我選擇了修改數(shù)據(jù)內(nèi)容,使排序有效。在這里需要一些技巧,如何修改lrsj字段值保證排序有效,而又不改變時間字段太多。我的做法是將lrsj值修改為lrsj rownum/24/60/60,即按行號增加1秒。具體的sql如下:

```sql

update ... a

set (

select rn/24/60/60

from(

select rid, rownum rn, a.*

from ... a

) b

where b.rid

)

```

通過修改后,分頁查詢數(shù)據(jù)顯示正常,不再出現(xiàn)重復值了。

標簽: