您的位置:首页 > 其它

对"一个非常难的查询问题(部门上下级的关系)"之解答的完善

2008-04-27 09:21 716 查看
这是一个CSDN老帖:
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=170559
我是抱着学习的心态看这个帖子的,下面把握学习结果总结一下。

楼主的问题是这样的:

--------------------------------------------------------------------------------

表A: id name 1 a 2 b 3 c 4 d 5 e 表B(id1,id2都与A表的id关联,是联合主外键): id1 id2 1 2 2 3 2 4 3 5 这是一个部门上下级关系,前面的是上级,后面的下级,我想得到所有部门的列表,按照级别关系写成完整的字串,结果如下: id full_name 1 a 2 a/b 3 a/b/c 4 a/b/d 5 a/b/c/d 请问怎么写?存储过程或函数都可以,十分感谢!

---------------------------------------------------------

问题的关键是把用LEVEL关键字把层次关系搞搞清楚。

selectlevelfromtable_Bconnectbypriorid2=id1startwithid1=0;

LEVEL---------- 1 2 3 4 3

SQL>selectlevelfromtable_Bconnectbypriorid2=id1startwithid1=1;

LEVEL---------- 1 2 3 2

SQL>selectlevelfromtable_Bconnectbypriorid2=id1startwithid1=2;

LEVEL---------- 1 2 1

SQL>selectlevelfromtable_Bconnectbypriorid2=id1startwithid1=3;

LEVEL---------- 1

SQL>selectlevelfromtable_Bconnectbypriorid2=id1startwithid1=4;

LEVEL----------

SQL>selectlevelfromtable_Bconnectbypriorid2=id1startwithid1=5;

LEVEL----------

可以看出,LEVEL值表示id1领导下人员id2在id1集团所处的层数,被领导者紧跟在byprior后面。

selectlpad(id2,level*length(id2),'')id, 2 ltrim(sys_connect_by_path(id2,'/'),'/')path 3 fromTable_B 4 connectbypriorid2=id1 5 startwithid1=0 6 /

ID PATH----------------------------------------------------------------------------------------------------------------------------------------------------------------1 1 2 1/2 3 1/2/3 5 1/2/3/5 4 1/2/41
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐