小编典典

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

sql

表-用户

列-(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中的树结构吗?左右叶方式怎么样?


阅读 241

收藏
2021-03-23

共1个答案

小编典典

在我看来,邻接列表模型的问题在于,在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

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

这里有一个很好的教程

2021-03-23