try:
select t.num id,tb.name from 
(select rownum num from all_source
where rownum<(select max(id) id from table1)
) t,table1 tb
where t.num=tb.num(+);

解决方案 »

  1.   

    select b.id,a.name 
      from table1 a,
           (select rownum id from all_objects where rownum <= N) b
     where a.id(+) = b.id
     order by b.id
      

  2.   

    非常感谢楼上的二位。但我看二位的解答是否table1 的id 必须为int 型的吗?
    如果我的table1字段id 为varchar2或者char型时,数据为1002,‘0002’等之类时,这样还可以
    跟rownum 相比较吗?请不吝赐教,多谢!!
      

  3.   

    create table test_table
    (
           id         varchar2(10),
           name       varchar2(50)
    );insert into test_table values('10001','name1');
    insert into test_table values('10002','name2');
    insert into test_table values('10003','name3');
    insert into test_table values('10004','name4');select t.id,tb.name
    from 
    (
    select rownum id from all_objects where rownum < (Select max(id) from test_table)
    ) t,test_table tb
    where t.id = tb.id(+)
    and t.id in ('10001','10002','10005')得到:
    id       name
    10001     name1
    10002     name2怎么得不到1005行啊?
      

  4.   

    赞同楼上做法:
    select b.id,a.name 
      from table1 a,
           (select rownum id from all_objects where rownum <= N) b
     where a.id(+) = b.id
     order by b.id搂主又问怎么没有10005行,你的10005行没有数据阿,那怎么会有rownum呢,你最起码,插入个1005行的数据阿:
    create table test_table
    (
           id         varchar2(10),
           name       varchar2(50)
    );insert into test_table values('10001','name1');
    insert into test_table values('10002','name2');
    insert into test_table values('10003','name3');
    insert into test_table values('10004','name4');
    insert into test_table values('10005','');select t.id,tb.name
    from 
    (
    select rownum id from all_objects where rownum < (Select max(id) from test_table)
    ) t,test_table tb
    where t.id = tb.id(+)
    and t.id in ('10001','10002','10005')得到:
    id       name
    10001     name1
    10002     name2
    10005