SELECT *
  FROM (SELECT ROWNUM AS my_rownum, m_3.*
          FROM (SELECT t2.*
                  FROM productstr t2, serv_st t1, userst ut
                 WHERE 1 = 1
                   AND t2.servid = t1.servid
                   AND t2.userid = ut.userid
                   AND t1.branch in ('XA')
                   AND t2.pcode = '000001'
                   and t2.per in ('1')
                   and t2.opdate >=
                       to_date('2013-07-05 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
                   and t2.opdate <=
                       to_date('2013-07-08 23:59:59', 'yyyy-mm-dd hh24:mi:ss')) m_3
         WHERE ROWNUM <= 100)
 WHERE my_rownum >= 51
本来想查出50条数据,却查出75条数据

解决方案 »

  1.   

    直接在数据库执行一下,看看结果的my_rownum字段值是不是51-100
      

  2.   

    问题肯定是有的
    解决办法或是想了解相关问题可百度:oracle分页重复
    下面是其中一个例子
    http://www.linuxidc.com/Linux/2012-04/58879.htm
      

  3.   

    应该是没有问题的、、、这是标准的分页sql写法
      

  4.   

    问题肯定是有的~~~   解决办法就是后面加order by
      

  5.   

    能不能试一下: SELECT *
       FROM (SELECT ROWNUM AS my_rownum, m_3.*
               FROM (SELECT t2.*
                       FROM productstr t2, serv_st t1, userst ut
                      WHERE 1 = 1
                        AND t2.servid = t1.servid
                        AND t2.userid = ut.userid
                        AND t1.branch in ('XA')
                        AND t2.pcode = '000001'
                        and t2.per in ('1')
                        and t2.opdate >=
                            to_date('2013-07-05 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
                        and t2.opdate <=
                            to_date('2013-07-08 23:59:59', 'yyyy-mm-dd hh24:mi:ss'))
              WHERE ROWNUM <= 100) m_3
      WHERE my_rownum >= 51
     
      

  6.   

    经过查证,
      原因:myrow_num 这个字段是不固定的,也就是说是动态的,随时都可能在改变,导致数据出现重复,如果这个字段是固定的,就不会出现重复数据
      解决办法:如果不能确定排序字段是唯一的,必须添加另外一个排序字段,该字段最好是唯一索引键