有一个表 ID  GID
ID      GID
--      ---
1       0
2       0
3       1
4       3
5       2
6       3GID是上级ID,GID有权限看所有子层的数据
现在想要查出结果为
ID   GID
--   ---
1    0
2    0
3    0
4    0
5    0
6    0
3    1
4    1
6    1
5    2
4    3
6    3请教大神,要如何查出

解决方案 »

  1.   


    with 
    test as 
    (
     select 1 as id , 0 as gid from dual 
     union all 
     select 2 as id , 1 as gid from dual 
     union all 
     select 3 as id , 0 as gid from dual 
     union all 
     select 4 as id , 0 as gid from dual 
     union all 
     select 5 as id , 2 as gid from dual 
     union all 
     select 6 as id , 3 as gid from dual 
    )
    select * from test start with id =1 connect by prior id = gid
      

  2.   

    connet by  不出效果,只查出了下一级,想要知道所有的下级
      

  3.   

    with t as(
    select '1' id,'0' gid from dual
    union all
    select '2','0' from dual
    union all
    select '3','1' from dual
    union all
    select '4','3' from dual
    union all
    select '5','2' from dual
    union all
    select '6','3' from dual
    )
    select t.id, connect_by_root gid gid
      from t
     start with gid in (select gid from t)
    connect by prior id = gid;
    ID GID
    -- ---
    1  0
    3  0
    4  0
    6  0
    2  0
    5  0
    3  1
    4  1
    6  1
    5  2
    4  3
    6  3
     
    12 rows selected