日期:2014-05-17  浏览次数:21009 次

oracle 递归树形列表
数据库tab_new_dept 
d_id d_name p_id
1 总部 0
2 分公司1 1
3 分公司2 1
4 财务部 2
5 人力部 2
6 客服部 3
7 后勤部 3
查询语句为
select d_id as id,p_id as pid,d_name as name,decode((select count(1) from tab_new_dept where p_id=a.d_id ), 0, 0, 1) isParent 
from tab_new_dept a
start with d_id=1 connect by prior d_id=p_id 
运行结果为:
id pid name isparent
1 0 总部 1
2 1 分公司1 1
4 4 财务部 0
5 2 人力部 0
3 1 分公司2 1
....

前台使用jQuery ztree插件来显示树形菜单,正确的现实,
红色字体应该如何理解呢???
我如果改为了
select count(1) from tab_new_dept where a.p_id=d_id(注:a所放的位置不同了)上面的运行结果中isparent的值将全部相反,这2句之间有什么不同呢,应该如何理解呢,如果是代码是这样,前天的树形菜单将是循环的。



------解决方案--------------------
select count(1) from tab_new_dept where p_id=a.d_id 
这个就是查看 有几个子公司 也就是用来判断是否是父亲节点

select count(1) from tab_new_dept where a.p_id=d_id
这个是找自己的父亲节点有几个 当然只有一个 用下decode肯定 就是相反的结果了