如何在嵌套集中查找特定 level2 节点的特定子节点

2024-05-25

我有一个标准的嵌套集模型,每个节点都有 name、lft 和 rgt 属性。

我可以使用以下方法找到特定员工的上级:

SELECT P2.* FROM Personnel AS P1, Personnel AS P2
WHERE P1.lft BETWEEN P2.lft AND P2.rgt
AND P1.name = "Bob"
ORDER BY P2.lft

我还可以通过添加限制和偏移量来找到二级管理器:

SELECT P2.* FROM Personnel AS P1, Personnel AS P2
WHERE P1.lft BETWEEN P2.lft AND P2.rgt
AND P1.name = "Bob"
ORDER BY P2.lft
LIMIT 2 OFFSET 1

在某些情况下,我可能有多个名为“Bob”的员工在不同的二级经理下工作。二级经理的名字是唯一的。

我需要一个查询,返回名为“Susan”的二级经理的所有名为“Bob”的员工。

编辑:我的查询只需要返回“在“玛丽”下工作的“鲍勃”,因为他是唯一一个拥有名为“苏珊”的二级经理的人。

   Big Boss
   /      \
Brian   Susan
  |       |
Susan   Mary
  |       |
 Bob     Bob

将数字放入:

  1 Big Boss 14
   /        \
2 Brian 7  8 Susan 13
  |           |
3 Susan 6  9 Mary 12
  |           |
4 Bob 5    10 Bob 11

如果我们可以指定我们知道它是“Susan”8 then:

SELECT employee.* 
FROM Personnel AS employee
inner join Personnel AS manager on employee.lft BETWEEN manager.lft
                                                    AND manager.rgt
WHERE 
  employee.name = 'Bob'
  and manager.name = 'Susan'
  and manager.lft = 8
ORDER BY employee.lft

否则,我认为您需要更多地了解该记录,以指定您所说的是哪位经理。

编辑:使查询变得更复杂一点,我使用来自的建议计算了深度本文 http://falsinsoft.blogspot.com/2013/01/tree-in-sql-database-nested-set-model.html. The fiddle http://sqlfiddle.com/#!2/fc0d9/11因为这也有效。

select
  employee.*
from
  Personnel employee
  inner join 
    (SELECT node.name, node.lft, node.rgt, (COUNT(parent.name) - 1) AS depth
     FROM Personnel AS node
     inner join Personnel AS parent on node.lft BETWEEN parent.lft AND parent.rgt
     GROUP BY node.name, node.lft, node.rgt) as manager
                 on employee.lft between manager.lft and manager.rgt    
where
  employee.name = 'bob'
  and manager.name = 'susan'
  and manager.depth = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在嵌套集中查找特定 level2 节点的特定子节点 的相关文章

随机推荐

  • Angular - UI 路由器 - 状态重入

    如何配置 UI Router 默认重新进入或重新加载状态 例如 用户想要刷新页面 因此他单击该页面后面的链接 但目前该链接不可点击 因为它会转到同一页面并且状态不会改变 使用浏览器按钮刷新确实有效 因此它会再次重新加载整个 SPA 这是不可
  • 为什么我们需要检测链表中的循环

    我看到很多关于如何检测链表中的循环的问答 但我想了解的是我们为什么要这样做 换句话说 检测链表中的循环的实际用例是什么 在现实生活中 您可能永远不需要检测链表中的循环 但是执行此操作的算法很重要 我在现实生活中多次使用它们 例如 我经常会递
  • 当 ajax 请求验证失败时,如何使用 Primefaces 突出显示 UIInput?

    验证器类 FacesValidator br gov valec sicpd util CpfValidator public class CpfValidator implements Validator Override public
  • 如何使用带有进度条的 HttpClient 下载文件?

    我创建了一个名为SiteDownload并添加了一些下载图像的链接 using System Collections Generic using System Linq using System Net using System Threa
  • 如何在Python中重命名virtualenv?

    我拼错了名字virtualenv使用以下方法初始化它 virtualenv vnev 我实际上打算创建一个名为的环境venv 尝试重命名后vnev文件夹到venv 我发现这并没有提供太多帮助 激活环境的名称仍然重命名旧的vnev mv vn
  • 如何将 Struts 2 与 Velocity 和 Tiles 结合使用

    有人能够获得与 struts 2 一起使用的速度和图块吗 我在网上查找示例或教程时遇到一些问题 从我从邮件列表中收集到的信息来看 这似乎根本不可能 但邮件已经很旧了 https struts apache org docs tiles pl
  • 即使 WebPack 构建工作正常,VS Code 显示未找到模块

    我的 VS Code 说它找不到导入 即使我的 WebPack 构建仍然有效 这是进口 import as tf from tensorflow tfjs 以及来自 VS Code 的消息 找不到模块 tensorflow tfjs 您的意
  • 使用 Nuxt 动态获取并编译模板

    我想从远程获取 svg 并通过编译使其栩栩如生 对于 赋予生命 我的意思是按类选择其中一些元素 并动态地将组件列表附加到其中 现在我只是使用 div div 我的组件如下所示 data return svg async created le
  • 如何从 lift webapp 读取文件

    我想在我的 lift 应用程序中读取 xml 文件 val data XML load new java io InputStreamReader new java io FileInputStream 文件名 编码 然而 我得到java
  • 如何从 docker 运行 Maven 包装器?

    我必须从 dockerfile 运行 Maven 包装器命令 但我不知道该怎么做 当我尝试这样写时 RUN mvnw s settings xml clean install 这个命令不起作用 我有错误mvnw not found 我的泊坞
  • Java 增强型 For-Loop 比传统的更快?

    所以我的理解是 增强的 for 循环应该更慢 因为它们必须使用迭代器 但是我的代码提供了混合结果 是的 我知道循环逻辑占用了循环中花费的大部分时间 对于少量迭代 100 1000 增强的 for 循环在使用和不使用 JIT 的情况下似乎都要
  • 随着数据的增加自动填充公式并动态排序[重复]

    这个问题在这里已经有答案了 我想对工作表中的数据进行排序 该工作表每天都会在第二个工作表中获取新行 问题是 如果我使用 SMALL 函数并自动填充单元格直到最后一行 A102482 或类似的内容 我的文件会变得非常巨大且滞后 gt 20mb
  • Android.system.ErrnoException:isConnected失败:ECONNREFUSED(连接被拒绝)

    我使用Java连接MySQL和Json将数据发送到android 当我通过URL地址将数据从Java发送到json时 http 192 168 1 221 9999 rentalcar service category getAllManu
  • 绘图不显示

    我正在使用闪亮的 但无法显示绘图 之前就出现过 不知道怎么变了 MRE global r 或将其放入 server r 中 library shinydashboard library plotly server r shinyServer
  • 获取当前 GPS 时出现 NullPointerException

    我有一个测试屏幕 其中有一个按钮 按下它会调用该服务 我正在尝试实现一种方法来获取当前用户的当前 GPS 位置 但在尝试调用时它崩溃了 谁能告诉我问题是什么吗 package com example whereyouapp import j
  • 有没有办法将所有内容都包含在 dbcontext 中?

    当查询一个DbContext急切加载时 需要Include Navigation 为了填充导航属性 然而 在某些情况下 我想简单地Include all实体的导航属性 有没有办法做到这一点 或者有办法做到这一点 我假设你可以反思 但我宁愿避
  • Android接收短信Intent:获取消息Id或线程Id

    我已经注册了一个广播监听器来接收android provider Telephony SMS DELIVER意向行动 我似乎能够获取这条新消息的正文和发件人电话号码 但是我无法获取此新消息的消息 ID 或线程 ID 我发现的唯一方法是搜索消
  • 接近堆限制的无效标记压缩分配 Angular 8 - JavaScript 堆内存不足

    42 构建 274 275 模块 1 个活动模块 src index js 提取 D Clients app node modules sass loader lib loader js ref 15 3 D src styles scss
  • 将模板添加为innerHTML 时,Angular 2 绑定/事件不起作用

    我正在尝试创建一个可配置的可重用表 单元格可以配置为具有 html 模板 我正在配置列 Review 拥有带有带有点击事件的锚标记的 html 模板 审核 行 到目前为止 我尝试将此模板作为innerHTML 插入 但所有角度绑定都不起作用
  • 如何在嵌套集中查找特定 level2 节点的特定子节点

    我有一个标准的嵌套集模型 每个节点都有 name lft 和 rgt 属性 我可以使用以下方法找到特定员工的上级 SELECT P2 FROM Personnel AS P1 Personnel AS P2 WHERE P1 lft BET