案例:
?????? 今天做了個分頁,起先以為 只要在區間就可以了,比如:
?????? select? *? from? tbl where rownum between??3 and 100;
?????? 可是不管如何查詢出來都沒有數據
原因:
?????? 由于對rownum的認識膚淺
分析:
????? 這種寫法之所以行不通,是因為 ROWNUM 列只有在記錄被取出或過濾時才會應用到記錄上。
????? 第一行在被取出時會被拋出,因為它的 ROWNUM 是1。然后,下一行被取出;它也會被拋出,因為它是新的“1”,以此類推,直到所有的行都被使用。這個查詢不會返回任何記錄。解決方法是在看到3到100之間的記錄時必須先取出1到30行的記錄
所以 如果 select? *? from? tbl where rownum between??1? and 100; 是正確, 因為剛好開始位置是從1 開始
解決:
????? select? t.*? from? (slect? rownum rowno,...... where .....and rownum <=100)? t where t.rowno>=3
即封裝兩層,先過濾小于100 的,然后在把rownum偽列顯示為真實列,在做條件查詢
???
?????? 今天做了個分頁,起先以為 只要在區間就可以了,比如:
?????? select? *? from? tbl where rownum between??3 and 100;
?????? 可是不管如何查詢出來都沒有數據
原因:
?????? 由于對rownum的認識膚淺
分析:
????? 這種寫法之所以行不通,是因為 ROWNUM 列只有在記錄被取出或過濾時才會應用到記錄上。
????? 第一行在被取出時會被拋出,因為它的 ROWNUM 是1。然后,下一行被取出;它也會被拋出,因為它是新的“1”,以此類推,直到所有的行都被使用。這個查詢不會返回任何記錄。解決方法是在看到3到100之間的記錄時必須先取出1到30行的記錄
所以 如果 select? *? from? tbl where rownum between??1? and 100; 是正確, 因為剛好開始位置是從1 開始
解決:
????? select? t.*? from? (slect? rownum rowno,...... where .....and rownum <=100)? t where t.rowno>=3
即封裝兩層,先過濾小于100 的,然后在把rownum偽列顯示為真實列,在做條件查詢
???