求助一条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啦
[解决办法]
你运行的效果是怎样的??
[解决办法]
