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