当前位置: 首页 > 面试题库 >

从节点获取所有最后一级的子级(叶)(层次查询Oracle 11G)

仲孙默
2023-03-14
问题内容

我正在尝试并寻找 Oracle 11g数据库中的层级查询中 从节点获取所有最后一级子级(叶子)的方法

我有2个表:“节点”(具有各自值的所有节点的列表)和“关系”,它们指定父子关系:

-节点-

 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


 类似资料:
  • 问题内容: 说我有树数据: 它存储在postgresql数据库“ tree-data”中,其中的“ id”列是节点的路径,如上,还有一些辅助列,例如“ depth”(整数,表示树中节点的深度),“ terminal” ‘(布尔值,是叶节点,没有子代)。 我现在想要实现的是查询“ A / A0 / A0.0”,该查询将检索所有父母及其第一级孩子。 让所有父母都容易: 这将返回以下节点: 但这就是我所

  • 问题内容: 我一直在试图解决这个问题,但是我什么都没走,希望有人可以救我。 我的问题是我正在使用邻接列表数据模型在mysql中生成我的层次结构数据。我可以将表(见下文)检索到多维数组中,并且每个项目都具有关联数组。我想要做的就是一旦得到这个数组,我想得到另一个数组,其所有节点(子,孙等)都位于父ID(包括父项)下。我只是无法锻炼如何在其中编写代码的PHP。 在MySQL中,我的表如下所示: 我可以

  • 我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如

  • 问题内容: 表-用户 列-(userId,name,managerId) 行- 如果我提供用户ID,则应列出所有向他报告的人。如果我给userId = 2,则应返回3,4。 这个查询正确吗 有什么有效的方法来管理DB中的树结构吗?左右叶方式怎么样? 问题答案: 在我看来,邻接列表模型的问题在于,在SQL中很难处理它,尤其是当您不知道树结构的嵌套深度时。 您提到的“左右叶方式”可能是嵌套集合模型,它

  • 如何计算二叉树中最小级别所有叶节点的总和。如果不存在树,则应返回-1。 例子: 对于上述二叉树,返回100(40 60) (图片来源:Geeksforgeks)

  • el-tree组件,初始化进来,只展开有选中节点的数据 没有选中的不展开 没展开的节点,只有在点击复选框的时候才会请求接口返回数据展开 在我点击一级或二级或三级叶子节点时,怎么能够根据是否选中,获取其最底层的数据的id的集合?选中的时候获取id集合,取消选中的时候,去掉取消掉的id