表:parentid为0的数据即为根节点。
id     name     parentID
1      湖北      0
2      武汉      1
3      武昌      2
4      北京      0
5      朝阳      4
如下图所示:
武昌-武汉-湖北
     朝阳-北京我想得到每个节点的根节点:
1   1
2   1
3   1
4   4
5   4
请大家指教。

解决方案 »

  1.   

    select id,connect_by_root id root_id from table connect by prior id=parentid
      

  2.   

    --补充一下
    with test as(
      select 1 id,'湖北' name, 0 parentid from dual union all
      select 2 id,'武汉' name, 1 parentid from dual union all
      select 3 id,'武昌' name, 2 parentid from dual union all
      select 4 id,'北京' name, 0 parentid from dual union all
      select 5 id,'朝阳' name, 4 parentid from dual)
    SELECT id, connect_by_root id root_id, NAME
      FROM test
    CONNECT BY PRIOR id = parentid
     START WITH parentid = 0;