一条ORACLE多表SQL树查询语句

求助一条ORACLE多表SQL树查询语句表T_PUB_UNIT_TYPE结构及部分数据UNIT_TYPE_ID| UNIT_TYPE_NAME | UNIT_T

求助一条ORACLE多表SQL树查询语句
表T_PUB_UNIT_TYPE结构及部分数据
UNIT_TYPE_ID  | UNIT_TYPE_NAME | UNIT_TYPE_CODE
------------------------- --------------------------- ------------------------
     1                         1000                       成品单位
      2                         1001                       重量单位
     43                         JBNL                       设备能力单位

表T_PUB_UNIT结构及部分数据
UNIT_ID | PARENT_ID | UNIT_TYPE_ID | UNIT_NAME | UNIT_CODE
------------------ ----------------- ------------------  --------------  -------------     
   2                      0                  1                  箱
   4                      2                  1                  万支
   6                      4                  1                  条
   21                     6                  1                  盒
现通过两表中的UNIT_TYPE_ID字段将两表联系起来,生成一颗树的结构
成品单位
   箱
      万只
         条
            盒
重量单位
    吨
      公斤
[解决办法]
搞不清楚你这棵树有何用,可以先连接+排序,打开某子叶时再加where ...
select a.UNIT_TYPE_ID,a.UNIT_TYPE_CODE, b.UNIT_NAME 
from T_PUB_UNIT_TYPE a
left join T_PUB_UNIT b on a.UNIT_TYPE_ID = b.UNIT_TYPE_ID
order by a.UNIT_TYPE_ID, b.UNIT_NAME 



[解决办法]
你是不是要下面这个?
select a.unit_type_name,b.unit_name from T_PUB_UNIT_TYPE a


left join T_PUB_UNIT b on b.UNIT_TYPE_ID=a.UNIT_TYPE_ID
 start with b.PARENT_ID=0
 connect by b.PARENT_ID = prior b.UNIT_ID
 order by b.parent_id;
[解决办法]
也可以在程序里做递归生成节点的,不一定非要在数据库里先递归好,语句就简单了。
[解决办法]
小白的方法,分组可以用group by嵌套递归,比较土,具体语句不会写,只是个思路
[解决办法]
oracle的可以这样写:(假设所有字段都是字符,如果是整型自己对应改一下就OK啦)
select * from 
(   
   select '计量单位管理' name,'0' id,'-1' parentid from dual 
   union all select UNIT_TYPE_CODE,UNIT_TYPE_ID,'0' from T_PUB_UNIT_TYPE 
   union all select UNIT_NAME ,UNIT_ID,UNIT_TYPE_ID from T_PUB_UNIT

start with parentid ='-1' connect by prior id=parentid
这个可以达到你要求
[解决办法]
union all 每个对应字段类型一样就OK啦
[解决办法]
你运行的效果是怎样的??
[解决办法]


一条ORACLE多表SQL树查询语句
SELECT T1.F_UNIT_TYPE_ID, T1.F_UNIT_TYPE_CODE, T1.F_UNIT_TYPE_NAME, 
T2.F_UNIT_ID, T2.F_PARENT_ID, T2.F_UNIT_CODE, T2.F_UNIT_NAME, T2.LV
FROM T_PUB_UNIT_TYPE T1
JOIN
(
SELECT F_UNIT_ID, F_PARENT_ID, F_UNIT_TYPE_ID, F_UNIT_CODE, F_UNIT_NAME, LEVEL AS LV
FROM T_PUB_UNIT
CONNECT BY PRIOR F_UNIT_ID = F_PARENT_ID
START WITH F_PARENT_ID = '0' 
)T2
ON T1.F_UNIT_TYPE_ID = T2.F_UNIT_TYPE_ID

[解决办法]
我来提供一个,看是正解否
with t_pub_unit_type as
 (select '1' unit_type_id, '成品单位' unit_type_name
    from dual
  union all
  select '2' unit_type_id, '重量单位' unit_type_name from dual),
t_pub_unit as
 (select '2' unit_id, '0' parent_id, '1' unit_type_id, '箱' unit_name
    from dual
  union all
  select '4' unit_id, '2' parent_id, '1' unit_type_id, '万支' unit_name
    from dual
  union all
  select '6' unit_id, '4' parent_id, '1' unit_type_id, '条' unit_name
    from dual
  union all
  select '81' unit_id, '0' parent_id, '2' unit_type_id, '吨' unit_name
    from dual
  union all
  select '61' unit_id, '81' parent_id, '2' unit_type_id, '公斤' unit_name
    from dual)
select lpad(' ', (level - 1) * 4, ' ') 
[解决办法]
 name name, pid, id
  from (select 'P' 
[解决办法]
 unit_type_id id, '-1' pid, unit_type_name name
          from t_pub_unit_type t
        union all
        select unit_id,
               decode(parent_id, '0', 'P' 
[解决办法]
 unit_type_id, parent_id),
               unit_name
          from t_pub_unit u)
 start with pid = '-1'
connect by pid = prior id;