select * from (select t.*,rownum id,rowid rid  from table1 t where rownum <= 3) where id >=1;
id      rid
1 AAANIBAAIAAAMa1AAA
2 AAANIBAAIAAAMa1AAB
3 AAANIBAAIAAAMa1AAC
select rid from (select t.*,rownum id,rowid rid  from table1  where rownum <= 3) where id >=1;
rid
AAANIBAAIAAAMa1AAQ
AAANIBAAIAAAMa1AAR
AAANIBAAIAAAMa1AAS请问:
1.为什么同样的数据搜索出来的rid值不同呢?
2.要怎么以第二种查询方法查到第一种的结果?就是指定字段的查询。

解决方案 »

  1.   

    select t.*,rownum id,rowid rid  from table1 t where rownum <= 3
    把这句改成这样
    select * from (select t.*,rownum id,rowid rid  from table1 t order by rowid)where rownum <= 3我的理解是因为select * from table where rownum<=3因为这个结果可能会变的加一个排序条件试试
      

  2.   

    是不是在跑2个SQL间隔的这段时间里其他的ORACLE USER在进行DML操作(先DELETE再INSERT),这种情况会引起ROWNUM值发生改变。
      

  3.   

    要区间 这样写满足你的要求吗
    select a,b,c,rid
    from
    (select a,b,c,rowid rid,rownum rn from table
    order by rowid)
    where rn>=1 and rn<=3
      

  4.   


    排序的区间应该用rownum,而不是rowid,rowid是物理地址,是数据不变的伪列。而rownum是序号的伪列。
      

  5.   

    我想做个delete
    用rowid做唯一标识,所以才用rowid
      

  6.   

    rowid是会变化的,它不是一成不变的,最好以表中的一个主键做为唯一标识