我正在尝试并寻找方法从节点获取所有最后一级子节点(叶子),在 Oracle 11g 数据库中的分层查询中。
我有两个表:“节点”(所有节点及其各自值的列表)和指定父子关系的“关系”:
--节点--
ID_NODE - VALUE
1 3
2 6
3 9
4 2
5 4
6 5
7 2
8 7
9 8
10 1
- 关系 -
ID_FATHER - ID_CHILD
1 2
1 3
1 4
2 5
2 6
4 7
5 8
5 9
7 10
我读过有关 CONNECT_BY_ISLEAF 的内容,如果它是叶子,它会返回 1,但我无法像 Oracle 示例那样查询 CONNECT_BY_ISLEAF,而且我没有得到任何结果。尽管我不知道如何准确地使用此函数进行查询(例如使用案例条件?)
太感谢你了!
我认为,类似的事情应该可以解决问题:
SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n
LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH r.id_father IS NULL)
WHERE isleaf = 1
哦,顺便说一句,您甚至无需使用分层查询即可获取所有叶子。只需从关系表中选择所有节点,这些节点不是任何节点的父节点。像这样的东西:
SELECT n.* FROM NODES n
WHERE NOT EXISTS (SELECT ID_FATHER FROM RELATION r
WHERE r.id_father = n.id)
为了从指定节点获取叶子节点,只需更改 STARTWITH 子句中的条件,即可从您感兴趣的节点开始反向树。例如,此查询将返回 id = 5 的节点的所有子叶子节点:
SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n
LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH n.id = 5)
WHERE isleaf = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)