select * from a,b,c where a.a=b.a and (c.a=b.a  or c.a=a.a-1) and rownum<100;请问这句sql的rownum怎么执行呢?我给rownum不同的值返回的结果却不一样,我想知道这句是怎么执行的。   我用的是pl/sql  ,是工具的问题吗?
谢谢!!!

解决方案 »

  1.   

    rownum不同的值返回的结果却不一样,当然不一样了,只要给定的rownum数量小于结果集的数量,那肯定是比原来少的。不过,出现的次序应该一样.我是在sqlplus中调试的。
      

  2.   

    是这样的,我的结果集只有十条记录,但是当我在多表查询中使用rownum时,rownum<1000与rownum<2000得到的结果集确是不一样的,当然,结果集不多于10条。
    我的这个问题可能有别的原因,我现在只想弄清楚,我题目的rownnum会嵌入到各个关联表中执行还是全部的结果集出来之后才执行。用oracle的执行计划好像不能看,希望高手解答一下。
      

  3.   

    那咋会啊。如果你把rownum放到所有结果集出来之后,那结果肯定是一样的. rownum<1000 和rownum<2000 都 >10,能不一样吗?
      

  4.   

    rownum 只有在按固定字段排序时,结果才不会变
      

  5.   

    rownum 是Oracle的伪列,和Rowid一样,对于个数据集,首先要得到数据集,才能用rownum取出所需的记录数,如果数据集的记录顺序变化了,如排序了,那么 rownum 的结果也就不一样了。