SELECT *
  FROM (SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM
          FROM ( 
         select * from tableA where tableA.id 
         in (  ...  )                           ) INNER_TABLE
         WHERE ROWNUM <=4) OUTER_TABLE
 WHERE OUTER_TABLE_ROWNUM >=1
这个语句用来数据库分页的,查出前4条数据,查出结果为
数据1
数据2
数据3
数据4
但如果我把红色标记的4换成5的话像查询出5条数据,结果为
数据2
数据4
数据5
数据1
数据3
       导致该问题的原因不太明白,输出顺便跟什么有关?可以肯定的是跟红色标记的省略号内的内容有关,哪个高手能帮忙解释下?

解决方案 »

  1.   

    你不加ORDER BY 的话,是根据读取顺序来决定数据的ROWNUM的
    另外说句,ORACLE没有什么默认排序的
      

  2.   

    http://topic.csdn.net/u/20091109/12/2078b0a5-89ba-4c29-bec8-565dd1773287.html
    正好我也个贴子在研究ROWNUM的一些问题,你也可以参考下
      

  3.   

    求一个表中费用为6到10位的记录.
    select patname ,price,sort from
    (select patname,id,price,rownum as sort from
       (select patname,id,price from bookcenter order by price desc)
       where rownum <=10)
    where sort>=6select patname ,price,sort from
    (select patname,id,price,rownum as sort from
       (select patname,id,price from bookcenter order by price desc)
       )
    where sort>=6 and sort <= 10两种方法,最近选一种.
      

  4.   

    里面加order by 是可以,但我要的是不加order by的情况,里面的sql会动态的根据页面的需求来排序,而不是写死的排序
      

  5.   

    sql会动态的根据页面的需求来排序
    这是什么意思
      

  6.   

    oracle默认是根据rowid排序的,不过rowid的排序规则不完全按照数据的前后插入次序
    最好加个order by
      

  7.   

    SELECT * 
      FROM (SELECT INNER_TABLE.*, ROWNUM OUTER_TABLE_ROWNUM 
              FROM ( 
            select * from tableA where tableA.id 
            in ( ...  )                 order by ... ) INNER_TABLE 
            WHERE ROWNUM <=4) OUTER_TABLE 
    WHERE OUTER_TABLE_ROWNUM >=1 在最底层加个Order BY就可以了