id      name           parentid
10011 光仔热力公司 10004
100013 第三分公司 10001
        100012 第二分公司 10001
10001 北京热力公司 0
10002 上海热力公司 0
10004 刘德华热力公司 0
100011 第一分公司 10001
    我想查询结果如下:
        id      name           parentid    name  
10011 光仔热力公司 10004      刘德华热力公司
100013 第三分公司 10001    北京热力公司
        100012 第二分公司 10001      北京热力公司
10001 北京热力公司 0
10002 上海热力公司 0
10004 刘德华热力公司 0
100011 第一分公司 10001      北京热力公司如何实现?
     

解决方案 »

  1.   

    select t1.id,t1.name,t1.parentid,t2.name as parentname from test t1 left join test t2 on t1.parentid = t2.id
      

  2.   

    with tab as
     (select '10011' as ID, ' 光仔热力公司' as name, '10004' as parentid
        from dual
      union all
      select '100013' as ID, '第三分公司' as name, '10001' as parentid
        from dual
      union all
      select '100012' as ID, '第二分公司' as name, '10001' as parentid
        from dual
      union all
      select '10001' as ID, '北京热力公司' as name, '0' as parentid
        from dual
      union all
      select '10002' as ID, '上海热力公司' as name, '0' as parentid
        from dual
      union all
      select '10004' as ID, '刘德华热力公司' as name, '0' as parentid
        from dual
      union all
      select '100011' as ID, '第一分公司' as name, '10001' as parentid from dual)select t1.*, t2.name as parent_name
      from tab t1
      left join tab t2
        on t1.parentid = t2.id
      

  3.   

    我不想写left join 还有其他方法吗
      

  4.   

    select a.*,
           (select name
              from table
             where id=a.parentid) name
      from table a;