select * from (select my_table.*,rownum as my_rownum from( 
select a.PROD_OFFER_ID,a.EXT_PROD_OFFER_ID,a.PROD_OFFER_NAME,a.ALIAS_NAME,
a.BRAND_ID,sb.BRAND_NAME,sp.sales_price,sp.org_price,sp.discount,sp.pref_price,
sd.offer_desc,sd.view_counts,sd.start_date,sd.templet_id,ph.picture_id,pic.picture_name,
pic.path_url,pic.version_no from S_PROD_OFFER a  left join S_BRAND sb on a.brand_id=sb.brand_id  
left join S_PROD_OFFER_PRICE sp on a.prod_offer_id=sp.prod_offer_id  left join S_PROD_OFFER_DETAIL sd 
on a.prod_offer_id=sd.prod_offer_id  left join S_PICTURE_OBJECT_REL ph on ph.object_id=a.prod_offer_id 
and ph.object_type='003' and ph.position_id=1  left join S_PICTURE pic on ph.picture_id=pic.picture_id  
where  a.state='00A' and a.OFFER_TYPE='100'  
 order by SALES_PRICE asc 

)my_table  where rownum< 5) where my_rownum>= 2;
 
 select * from (select rownum r, t.* from (
 select a.PROD_OFFER_ID,a.EXT_PROD_OFFER_ID,a.PROD_OFFER_NAME,a.ALIAS_NAME,
a.BRAND_ID,sb.BRAND_NAME,sp.sales_price,sp.org_price,sp.discount,sp.pref_price,
sd.offer_desc,sd.view_counts,sd.start_date,sd.templet_id,ph.picture_id,pic.picture_name,
pic.path_url,pic.version_no from S_PROD_OFFER a  left join S_BRAND sb on a.brand_id=sb.brand_id  
left join S_PROD_OFFER_PRICE sp on a.prod_offer_id=sp.prod_offer_id  left join S_PROD_OFFER_DETAIL sd 
on a.prod_offer_id=sd.prod_offer_id  left join S_PICTURE_OBJECT_REL ph on ph.object_id=a.prod_offer_id 
and ph.object_type='003' and ph.position_id=1  left join S_PICTURE pic on ph.picture_id=pic.picture_id  
where  a.state='00A' and a.OFFER_TYPE='100'  
order by SALES_PRICE asc
 )t )where r>1 and r<=4;2条分页的结果不一样,中级部分是一样的

解决方案 »

  1.   

    rownum在非主键或索引键排序选出时,一定要先在子查询中排序,然后用rownum再选出,因此时的rownum是按主键或索引键排序生成的,并不是按你的排序字段生成的但你上面的写法,如果子查询一样,结果必一样。
    可否将你选的数据列出来,看下哪里有不一样的,我实在不信他会不一样。
      

  2.   

    第一条:1 800009362 800009362 海信E316/EVDO(虚拟) 海信E316/EVDO(虚拟) 21 海信 0.00 屏幕像素:320×240/直板/单网单待 10 10 10042 海信E316 /met/terminal_img/74493_HS-E316.jpg 1 2
    2 800017273 800017273 中兴N880S/EVDO/智(话补) 中兴N880S/EVDO/智(话补) 1 中兴 0.00 黑色 - 3.5英寸/320万像素/直板/3G/android2.2/  10 10 10047 中兴N880S /met/terminal_img/75415_ZTE-C_N880S.jpg 1 3
    3 800006780 800006780 海信 HS-E316 海信 HS-E316 21 海信 298.00 屏幕像素:320×240/直板/单网单待 10 10 10042 海信E316 /met/terminal_img/74493_HS-E316.jpg 1 4第二条
    1 2 800017273 800017273 中兴N880S/EVDO/智(话补) 中兴N880S/EVDO/智(话补) 1 中兴 0.00 黑色 - 3.5英寸/320万像素/直板/3G/android2.2/  10 10 10047 中兴N880S /met/terminal_img/75415_ZTE-C_N880S.jpg 1
    2 3 800009362 800009362 海信E316/EVDO(虚拟) 海信E316/EVDO(虚拟) 21 海信 0.00 屏幕像素:320×240/直板/单网单待 10 10 10042 海信E316 /met/terminal_img/74493_HS-E316.jpg 1
    3 4 800006780 800006780 海信 HS-E316 海信 HS-E316 21 海信 298.00 屏幕像素:320×240/直板/单网单待 10 10 10042 海信E316 /met/terminal_img/74493_HS-E316.jpg 1
      

  3.   

    中间部分:1 800017275 800017275 三星I509/EVDO/智(话补) 三星I509/EVDO/智(话补) 8 三星 0.00 3英寸/200万像素/Android OS 2.3/直板 10 10 10046 三星i509 /met/terminal_img/75217_SCH-i509.jpg 1
    2 800017273 800017273 中兴N880S/EVDO/智(话补) 中兴N880S/EVDO/智(话补) 1 中兴 0.00 黑色 - 3.5英寸/320万像素/直板/3G/android2.2/  10 10 10047 中兴N880S /met/terminal_img/75415_ZTE-C_N880S.jpg 1
    3 800009362 800009362 海信E316/EVDO(虚拟) 海信E316/EVDO(虚拟) 21 海信 0.00 屏幕像素:320×240/直板/单网单待 10 10 10042 海信E316 /met/terminal_img/74493_HS-E316.jpg 1
    4 800006780 800006780 海信 HS-E316 海信 HS-E316 21 海信 298.00 屏幕像素:320×240/直板/单网单待 10 10 10042 海信E316 /met/terminal_img/74493_HS-E316.jpg 1
    5 100339 100339 金立C100 金立C100 20 金立 399.00 2.4英寸 320x240像/NUCLEUS/单网单待 10 10 10048 金立C100 /met/terminal_img/75504_C100.jpg 1
    6 137290 137290 联想A390E 联想A390E 12 联想 838.00 3G手机(黑色)CDMA2000/CDMA 电信定制 10 10 10045 联想A390e /met/terminal_img/74986_Lenovo_A390e.jpg 1
    7 100212 100212 联想A390E(龙) 联想A390E(龙) 12 联想 838.00 3G手机(黑色)CDMA2000/CDMA 电信定制 10 10 10045 联想A390e /met/terminal_img/74986_Lenovo_A390e.jpg 1
    8 800017254 800017254 三星I509/EVDO/智(代理商) 三星I509/EVDO/智(代理商) 8 三星 990.00 3英寸/200万像素/Android OS 2.3/直板 10 10 10046 三星i509 /met/terminal_img/75217_SCH-i509.jpg 1
    9 800017277 800017277 三星I509/EVDO/智 三星I509/EVDO/智 8 三星 990.00 3英寸/200万像素/Android OS 2.3/直板 10 10 10046 三星i509 /met/terminal_img/75217_SCH-i509.jpg 1
    10 100214 100214 三星I509银(龙) 三星I509银(龙) 8 三星 990.00 3英寸/200万像素/Android OS 2.3/直板 10 10 10046 三星i509 /met/terminal_img/75217_SCH-i509.jpg 1
      

  4.   

    order by SALES_PRICE asc 你再加一个排序条件,比如PROD_OFFER_ID,那结果应该就一样了。因为第一种与第二种手机单价是一样的。
      

  5.   

    中间那部分都是一样的 排序不影响吧 还有就是第一条SQL如果改其他数字的话大于10后一直是那几条数据
      

  6.   

    第一句中的 where rownum< 5 是对my_table 表而言,rownum作为临时表的特殊字段。
    where rownum< 5  只会取临时表的前5个,并非真正在结果集中去取。
    分页建议用第二种方法,那样才能实现分页的真正的意义。
      

  7.   

    rownum<=5和order用在同一层的效果是: 取得自然顺序的前5条,然后再排序。
      

  8.   

    使用rownum的時候注意一個別名,跟子查詢就可以!