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

如何获得树结构中节点的所有子级?SQL查询?

司马渝
2023-03-14
问题内容

表-用户

列-(userId,name,managerId)

行-

(1,nilesh,0)
(2,nikhil,1)    
(3,nitin ,2)  
(4,Ruchi,2)

如果我提供用户ID,则应列出所有向他报告的人。如果我给userId = 2,则应返回3,4。

这个查询正确吗

SELECT ad3.userId
FROM user au , user  au2 , user  au3
WHERE 
    ad.managerId = ad2.managerId AND 
    ad3.managerId = ad2.userId AND
    ad.userId=2

有什么有效的方法来管理DB中的树结构吗?左右叶方式怎么样?


问题答案:

在我看来,邻接列表模型的问题在于,在SQL中很难处理它,尤其是当您不知道树结构的嵌套深度时。

您提到的“左右叶方式”可能是嵌套集合模型,它允许您存储类似这样的内容

LFT   RGT   Name
1     8      nilesh
2     7      nikhil
3     4      nitin
5     6      Ruchi

然后,您可以简单地找到所有下属

SELECT Name FROM Hierarchy WHERE LFT BETWEEN @LFT AND @RGT

我认为查询起来要容易得多,但是对树的修改却很难。如果您的数据变化不大,那么我认为这是一个更好的解决方案。(虽然不是每个人都会同意我的观点)

这里有一个很好的教程



 类似资料:
  • 给定一个实现为根节点的泛型树,该根节点具有子节点列表,子节点是节点,并且每个节点都具有其子节点列表。 节点具有其子节点的列表: 也有他们儿子的名单:;;; 我将解释我的算法的想法,你可以修复它或给我另一个全新的想法。 遍历树,将树的每个节点添加到队列中,或者如果添加的最后一个节点是级别的最后一个节点,则添加一个“null”。Null是队列中的标识符,用于知道级别已结束的位置。我的问题是,我不知道第

  • 我有一个带有子节点和父节点的经典树结构。现在,我想收集从最低级别开始按深度分组的所有节点(即按相反顺序),如下所示: 虽然使用递归遍历方法获取深度级别非常容易,但我想知道是否有任何方法可以在 BFS 或 DFS 搜索中的树遍历期间立即获取深度级别。 我知道我可以在节点插入期间存储深度级别,但由于我要进行大量插入和删除,我更愿意一次性收集按级别分组的整个结构。 另外,我根本不喜欢使用BDS或DFS,

  • 问题内容: 在C#中,我发现了一种非常可爱的方法,该方法使您可以从指定控件中获取所有后代和所有THEIR后代。 我正在寻找JavaFX的类似方法。 我看到了我要使用的类,因为它是派生所有带有孩子的Node类的类。 到目前为止,这是我所拥有的(并且我还没有在Google上通过“ JavaFX从场景中获取所有节点”之类的搜索真正找到任何东西): 那么,如何确定N是否是父母(或从父母继承)呢?我说的对吗

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

  • 我有一个树数据结构,其中每个节点可以有任意数量的子节点,树可以是任何高度的。获取树中所有叶节点的最佳方法是什么?有没有可能比遍历树中的每个路径更好,直到我到达叶节点? 在实践中,树的最大深度通常为 5 左右,树中的每个节点将有大约 10 个子节点。 我对其他类型的数据结构或特殊树持开放态度,这将使获取叶节点特别理想。 我正在使用javascript,但实际上只是在寻找一般建议,任何语言等。 谢啦!

  • 假设我在一棵树中有一个节点,我如何获得所有的叶节点,它们的祖先是这个节点?我这样定义了TreeNode: