oracle如何查询任意节点下的所有子节点

表结构简单T(id,parentId),如图比如说输入A节点ID(001),能查询到DEG三个节点,输入B节点ID(001001)能查询到DE,CF的话能查询到G,脚本如... 表结构简单T(id,parentId),如图

比如说输入A节点ID(001),能查询到DEG三个节点,输入B节点ID(001001)能查询到DE,CF的话能查询到G,脚本如何写?只查询叶子节点,不查询类似BCF这样有下层节点的节点。
展开
 我来答
帐号已注销
2015-06-23 · TA获得超过315个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:251万
展开全部

向下递归+叶子节点过滤就行了,例子:

--模拟数据
with tmp(id,pid) as
(SELECT 'A','' FROM DUAL UNION ALL
SELECT 'B','A' FROM DUAL UNION ALL
SELECT 'C','A' FROM DUAL UNION ALL
SELECT 'D','B' FROM DUAL UNION ALL
SELECT 'E','B' FROM DUAL UNION ALL
SELECT 'F','C' FROM DUAL UNION ALL
SELECT 'G','F' FROM DUAL )
SELECT ID FROM TMP T
WHERE CONNECT_BY_ISLEAF=1 --只显示叶子节点
START WITH T.ID='A'  --递归起点,即查询条件
CONNECT BY PRIOR ID=PID --递归条件,向下递归
更多追问追答
追问
那如果用DB2的语法怎么写?
追答
没用过DB2..
射手小小王
2015-06-23 · TA获得超过398个赞
知道小有建树答主
回答量:716
采纳率:85%
帮助的人:263万
展开全部
SELECT LEVEL, EMPNO, ENAME, MGR
FROM EMP
START WITH MGR=7566
CONNECT BY PRIOR EMPNO = MGR
以上语句是查询7566的所有下属,包括下属的下属
追问
那如果用DB2的语法怎么写?
追答
不好意思,我没有用过DB2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式