取m和n之间的:
select * from (select rownum id,tbname.* from tbname) where id between m and n;

解决方案 »

  1.   

    bzszp(SongZip) 的方法很有意思,不知道老兄你是否在实际项目中就是这么处理的呢?请问对速度有影响吗?多谢。
      

  2.   

    如果用中间件来开发的话,注意selece方法时使用order by 选项,以保证选出的数据集是确定的,然后用循环+绝对定位数据集的方法实现分页显示。
      

  3.   

    bzszp(SongZip)的速度还是可以的,
    如果有order的话会很麻烦,
    一是8i以下不支持
    二是速度因此会变慢
      

  4.   

    to  bzszp(SongZip) :
       我试了,m的值只能为1,如果不为的话就什么也查不到,这是为什么呢?如果是这样的话,分页显示也不能实现的。
      

  5.   

    SQL> select count(*) from forums;  COUNT(*)
    ----------
             8
    SQL> select * from (select rownum nu,forums.* from forums) where nu between 3 and 4;        NU FO FORUMNAME                                                 NUM
    ---------- -- -------------------------------------------------- ----------
         RENUM MANAGER
    ---------- --------------------
             3 3  健康与性                                                    3
             6 欧公         4 4  美丽人生                                                    2
             0 杜公
      

  6.   

    up.
      直接select, rownum 无效
      
     =〉
       select * from forums where rownum <= 4
       minus
      select * from forums where rownum <= 3
      

  7.   

    你写的肯定有问题,仔细检查一下,或者贴出来看看
    SQL> select * from (select rownum id,E.* from E) where id between 3 and 6;       ID AAA                        BBB       CCC
    --------- -------------------- --------- ---------
            3 103                          3
            4 103                         43
            5 102                          5        55
            6 aaa                          6         6
      

  8.   

    谢谢 bzszp(SongZip),我发现我犯了个小错误,我的那个表里有id这个字段,所以我换一个就没问题了!
        结帐!
      

  9.   

    不好意思,我还有一个小问题,为什么必须写成select rownum **,... 不能直接写select rownum,... 必须把rownum指定一个变量呢?谢谢!
      

  10.   

    不好意思,我还有一个小问题,为什么必须写成select rownum **,... 不能直接写select rownum,... 必须把rownum指定一个变量呢?谢谢!
    -----------------------
    因为rownum不是你表中的字段,而是oracle的一个特殊数据。而且是动态产生的
      

  11.   

    补充一点,你如果不指定别名,oracle就在外面的查询语句历重新生成rownum了,就不是子查询里的数据了。
      

  12.   

    我有一张表testnum,表中数据如下:
    SQL> select * from testnum;        ID NAME                     SALARY
    ---------- -------------------- ----------
           100 yaojh                      6000
           400 chenjw                     3000
           200 hezz                       2000
           300 luoyx                      3000
           500 hek                        4000
           600 test-one                   3500
           700 test-two                   3600
           800 test-three                 37008 rows selected.
    当在where之后不加别的条件时,能返回正确的结果:SQL>  select * from (select rownum dd, testnum.* from testnum)
      2  where  dd >= 3 and dd <= 5;        DD         ID NAME                     SALARY
    ---------- ---------- -------------------- ----------
             3        200 hezz                       2000
             4        300 luoyx                      3000
             5        500 hek                        4000但在加入别的条件时就不成了,请看:
    SQL>  select * from (select rownum dd, testnum.* from testnum)
      2  where salary <= 3000 and salary <= 4000
      3  and dd >= 3 and dd <= 5;        DD         ID NAME                     SALARY
    ---------- ---------- -------------------- ----------
             3        200 hezz                       2000
             4        300 luoyx                      3000请问这是什么原因????
      

  13.   

    kmyjh() :你应改成
     select * from (select rownum dd, testnum.* from testnum
                    where salary <= 3000 and salary <= 4000
                   )where dd >= 3 and dd <= 5;
      

  14.   

    NullGate(我爱小白):
        多谢!
      

  15.   

    出了点怪事,请看一下,
    1*********************这是全部数据:
    SQL> select * from table2;A          B          C
    ---------- ---------- ----------
    a          sd
    sdfs       dfd
    dfs        dfsd
    sdfsd      fsdf
    dfsd       sdfs已用时间:  00: 00: 00.10
    2*********************这是1和2的:
    SQL> select * from table2 where rownum between 1 and 2;A          B          C
    ---------- ---------- ----------
    a          sd
    sdfs       dfd已用时间:  00: 00: 00.10
    这是2和3的,怎么没数据???????
    SQL> select * from table2 where rownum between 2 and 3;未选定行已用时间:  00: 00: 00.10
    ********************这里的rownum没错呀
    SQL> select rownum from table2;    ROWNUM
    ----------
             1
             2
             3
             4
             5