select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;
为什么别名的那个条件不能和rownum用and连接放在内层,把外层去掉啊
select rownum no,id,name from student where rownum<=3 and no >=2;

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【ahujyy】截止到2008-07-27 14:02:31的历史汇总数据(不包括此帖):
    发帖的总数量:9                        发帖的总分数:40                       每贴平均分数:4                        
    回帖的总数量:15                       得分贴总数量:4                        回帖的得分率:26%                      
    结贴的总数量:9                        结贴的总分数:40                       
    无满意结贴数:6                        无满意结贴分:65                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:66.67 %               无满意结分率:162.50%                  
    敬礼!
      

  2.   

    当然不行了,select * from (select rownum no,id,name from student where rownum <=3 ) where no >=2;是高等内层查完了才查外层,而后者是并列的。
      

  3.   

    请问
    select rownum no,id,name from student where rownum <=3 and rownum >=2
    能行吗?
    一个道理啊
      

  4.   

    rownum的话,rownum一定要包含1,怎么理解呢?
    在where clause中,一般是这样的形式:
    where condition A
    and   condition B
    and   ...
    and   rownum <= xoracle处理的机制是,把所有rownum的条件过滤掉之后,形成了一个结果集,结果集中每一行有个一虚拟的序号(就是rownum的值),但这个虚拟的序号不是固定不变的,例如:
    结果集为:
    id
    aaa
    bbb
    ccc
    ddd
    此时: aaa对应的rownum为1, bbb对应的rownum为2,如此类推.
    当你的where clause中出现:
    1. rownum = 1
    oracle会在这个结果集的基础上每一行去检测rownum的值,显然只有aaa符合,因此只返回aaa那一行.
    2. rownum <= 3
    oracle同样在结果集中每一行去检测rownum的值,显然aaa bbb ccc符合,因此返回3行.

    3. rownum = 2
    oracle在检测第一行时发现第一行aaa的rownum不等于2,因此把此行从结果集中去掉,然后重新生成结果集如下:
    id
    bbb
    ccc
    ddd
    此时,rownum就会重新生成,也就是bbb为1,ccc为2ddd为3.
    这样的话,当在检测bbb这一行的时候,发现它的rownum是1,也不符合条件(rownum = 2),所以又把这行从结果集中去掉了,如此类推,因此你得到结果是一行也select不出来.
    4. rownum >= x (x 不等于1)
    这种条件得出的结果也是一行也没有的,可以根据第3种情况自己推算一下.

    所以,你在网上搜到很多关于rownum的资料都会说: rownum一定要包括1.
      

  5.   

    rownum 是过滤之后的记录编号
    用 
    select * from table1 where rownum>1 查不到记录就这么回事
    比如记录是
    aa
    bb
    cc
    dd
    ee如果你觉得rownum>1 应该能查出
    bb
    cc
    dd
    ee其实此时 bb 所对应用的 rownum才是1,所以无法确定记录
      

  6.   

    楼主可以看我整理过一个关于 rownum 的东西为什么Oracle的伪列rownum不支持>,>=,=,between...and,而都用<比较 
      

  7.   

    谢谢各位的讲解.特别感谢lxxzhy.结帖了.