中易网

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

答案:2  悬赏:80  
解决时间 2021-04-23 01:18
表结构简单T(id,parentId),如图

比如说输入A节点ID(001),能查询到DEG三个节点,输入B节点ID(001001)能查询到DE,CF的话能查询到G,脚本如何写?只查询叶子节点,不查询类似BCF这样有下层节点的节点。



最佳答案
向下递归+叶子节点过滤就行了,例子:
--模拟数据
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 --递归条件,向下递归
全部回答
我感觉你应该分两步走,第一找到父节点,第二,将这些父节点加上条件。不知道你的父节点和叶子节点是怎么存储到表中的,我举一个父节点和叶子节点存储在一个表中的情况给你说一下。 第一步,找到所有父节点 select 父节点 from table_a where table_a.isdetail<>1(意思是说,父节点不是明细项) 第二步,找到叶子节点的父节点:select 父节点 from table_a where table_a.isdetail<>1 and table_a.叶子节点 in(叶子节点) 第三步,再加上条件:找到叶子节点的父节点:select 父节点 from table_a where table_a.isdetail<>1 and table_a.叶子节点 in(叶子节点)and 父节点不符合哪些条件。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
真三国无双OL不是说第一次充15无双币送15无双
大连到东莞机票(单程)
南京下关区 现在寄送邮件地址 写鼓楼区 某某
守护甜心中几斗跟亚梦告白的是那集?
嘉兴市交通事故快速处理中心在哪里啊,我有事
深圳公明镇这一块有没有打乒乓球的地方?!!
山西常家大院的资料?
哪种拳法最适合自学,最有实战效力?
劳动仲裁已经裁决完了,我该怎么办?
如果一个人要你等他两年,你会等吗?
成都长安奔奔4S店
氢原子由高能级向低能级跃迁轨道半径如何变
这台电脑应该怎么升级。这是台式的。有点卡了
怎么学信息技术?
鹤童医药超市(南宁路店)地址在什么地方,想过
推荐资讯
想做供精人工授精?
济南槐荫区办个人pos机的在吗
15年德惠6月份天气预报
哪买安眠药?
魔兽世界熊T 的拉怪技巧和手法
DNF湖南5区诺斯玛尔:斩影重甲护腿值多少钱?
钢柱子理论重量表
成大方圆连锁药店崔东分店我想知道这个在什么
常宁市公积金管理办所在地
WOW、格里洛克之眼
请问浴霸对孕妇有没有伤害啊?它的辐射大吗?
我怀孕了有两个多月了,我很想要这个小孩,可是
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?