tsql - 在 TSQL 中,如何选择层次结构中的节点?
问题描述
我有一个代表组织层次结构的表。稍微简化一下(因为这里不涉及复杂性),想象一下经典的物料清单或管理层次结构,每条记录都有一个 id 和一个 parent_id,当然还有其他相关数据,我们只说名称。我们称这个表为“节点”。
然后我有记录说明哪些用户有权访问层次结构中任何给定节点的数据。调用这个 node_user。
因此,我想查找位于或低于给定节点的节点的所有 node_user 记录。
对于少数有限数量的级别来说足够简单。说 ...
select nu.userid
from node_user nu
join node n1 on n1.id=nu.node_id
left join node n2 on n2.id=n1.parent_id
left join node n3 on n3.id=n2.parent_id
where @root in (n1.id, n2.id, n3.id)
但是如果我不知道最大深度或者它很大怎么办?我在想我可以使用 CTE 来“追上树”,做“从 node_user 加入(带有层次结构......)”,但这是一个语法错误。显然您不能将 CTE 用作子查询。但是我不能将 CTE 作为主要查询,因为我不知道我会找到哪些节点。除非我让 CTE 为整个数据库构建一棵树,否则我认为这会成为性能杀手。
有没有简单的方法可以做到这一点,而我只是大脑冻结?
解决方案
推荐阅读
- swiftui - navigationBarItems 将列表向右移动
- java - 使用模拟。尝试验证是否使用了我的方法
- python - 是否有 python 模块来指示 .py 是否正在运行?
- sharepoint - JQGrid 可以与 SharePoint 结果源 REST API 一起使用吗
- c# - 如何从正确转换为变量的列表框中获取值
- python - 无法将 numpy 模块导入 python 文件,但它适用于终端
- python - Tensorflow 已下载但未安装在 ubuntu 服务器上
- java - java selenium:想做一个采购机器人。我在页面上的 JavaScript 按钮有问题
- javascript - 清除材料设计下拉值会导致错误
- java - 用equals方法测试Java中对象的相等性