日期:2014-05-17  浏览次数:20719 次

请教个奇怪是SQL问题?
初学oracle,碰到个奇怪的问题,为什么条件between   1   and   5有结果,between   2   and   5就没结果了,20分哦,谢谢


    1     select   rownum,ename,sal,job   from   (select   *   from   scott.emp   order   by   sal   desc)
    2*   where   rownum   between   1   and   5
SQL>   /

        ROWNUM   ENAME                           SAL   JOB
----------   ----------   ----------   ---------
                  1   KING                           5000   PRESIDENT
                  2   SCOTT                         3000   ANALYST
                  3   FORD                           3000   ANALYST
                  4   JONES                         2975   MANAGER
                  5   BLAKE                         2850   MANAGER

SQL>   ed
已写入文件   afiedt.buf

    1     select   rownum,ename,sal,job   from   (select   *   from   scott.emp   order   by   sal   desc)
    2*   where   rownum   between   2   and   5
SQL>   /

未选定行




------解决方案--------------------
rownum的问题
select rn,ename,sal,job from (select scott.emp.*,rownum as rn from scott.emp order by sal desc)
where rnbetween 2 and 5
------解决方案--------------------
这种写法之所以行不通,是因为 ROWNUM 列只有在记录被取出或过滤时才会应用到记录上。第一行在被取出时会被抛出,因为它的 ROWNUM 是1。然后,下一行被取出;它也会被抛出,因为它是新的“1”,以此类推,直到所有的行都被使用。所以这个查询不会返回任何记录。
当然,楼上的方法应该也是可行的。