我想在 SQL 中使用递归返回新列?

2024-01-08

我有一个表格,其列如下所示

| Employee ID | Manager ID |
|:-----------:|:----------:|
| E068        | E067       |
| E071        | E067       |
| E229        | E069       |
| E248        | E144       |
| E226        | E223       |
| E236        | E241       |
| E066        | E001       |
| E067        | E001       |
| E144        | E001       |
| E223        | E001       |
| E001        | Null       |
| E241        | Null       |

我们确实有包含“领导者 ID”的表

| Leader ID |
|-----------|
| E001      |
| E241      |

问题陈述:

此问题是通过使用员工及其经理数据来识别经理主管。

关于:我们有一个员工 ID 和他们的经理 ID。请注意,经理 ID 来自员工 ID。由于每个经理都有一位高于其级别的经理。

首先,我们将获取 Manager ID 列中的所有唯一 ID。 然后对于 Manager ID 列中的每个 ID,我们将查找其各自的 Manager ID(Manager) 然后我们将创建一个新的列名称Leader它将包含 Manager 的所有层次结构。

所需输出:

| Employee ID | Manager ID  | Leader ID |
|-------------|-------------|-----------|
| E068        | E067        | E001      |
| E071        | E067        | E001      |
| E229        | E069        | E001      |
| E248        | E144        | E001      |
| E226        | E223        | E001      |
| E236        | E241        | E241      |
| E066        | E001        | E001      |
| E067        | E001        | E001      |
| E144        | E001        | E001      |
| E223        | E001        | E001      |

员工 ID 列包含唯一 ID,而经理 ID 包含重复 ID。


这是一个典型的例子与递归 https://www.postgresql.org/docs/current/queries-with.html

使用 RECURSIVE,WITH 查询可以引用其自己的输出。

尝试这个:

with recursive subordinates as
  (select 
      employeid, 
      e.managerid, 
      e.managerid as leader 
   from employes e 
   where e.managerid in(select * from leaders) -- non recursive term
   union 
   select 
      e.employeid, 
      e.managerid, 
      a.managerid as leader 
    from employes e 
          join subordinates a on a.employeid = e.managerid -- recursive term
) select * from subordinates

如文档中所述:

A 与递归总是由

  1. 非递归术语
  2. UNION or 联合所有
  3. 一个递归术语,唯一可以引用查询输出的

当前一次迭代没有输出时,递归终止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我想在 SQL 中使用递归返回新列? 的相关文章

随机推荐

  • iPhone SDK:如何创建一个在点击位置插入文本的 UITextView?

    我想创建一个 UITextView 您可以点击其中的任何位置并开始在该位置键入 该控件的默认行为是从最后一个字符结束处开始键入 因此 如果我有一个没有文本的 UITextView 并点击控件的中间 我想从那里开始输入 而不是从左上角开始 实
  • 如何合并两个大型数据集,同时在r中生成具有不同重复值的新列

    我有一个让我抓狂的问题 真的需要你的帮助 简化的问题是这样的 d1 lt data table v1 c a b c d d b a c a d b a v2 seq 1 12 V3 rep 1 4 times 3 d2 lt data t
  • Julia:为类型实现标准数学运算

    有没有办法在 julia 中为用户创建的类型实现基本算术 例如 type Foo bar Float32 foo Int32 end a Foo 3 23 23 b Foo 4 56 54 c a b 如果可能的话 我怎样才能做到这一点 提
  • 树视图闪烁,没有任何事件

    我有一个闪烁TreeView我知道这是一个常见问题 事情是TreeView没有事件 是的 我明白 当我从 a 递归添加节点时XmlDocument它有点闪烁 这是正常的 即使所有内容都加载后 我的也会闪烁 当我的鼠标悬停在节点上或单击节点时
  • SFINAE 在类型和非类型模板参数的情况下工作方式不同

    为什么这段代码有效 template lt typename T std enable if t
  • 获取数据表中某一列的行索引

    1 2 3 A B C D E F G H I System Data DataTable dt new DataTable dt Columns Add 1 dt Columns Add 2 dt Columns Add 3 dt Row
  • 在 Mercurial 中编写自定义日志关键字过滤器作为扩展

    我已经检查了有关如何编写 Mercurial 扩展的教程 我想知道如何专门为日志关键字添加过滤器 感谢帮助 我认为一个例子可以最好地解释它 from mercurial import templatefilters def upper s
  • VS2010项目依赖

    我在 VS2010 中有一个 C 项目和一个 C 项目 该项目将使用此 C 项目输出 它将其用于 p invoke 我想我可以通过编辑解决方案中的 项目依赖项 来确保 c 项目在 c 项目之前构建 但这似乎没有任何效果 我的构建服务器上的构
  • 无法在 Windows 10 上使用 docker 访问 localhost:8080

    当运行我的docker compose development yaml在我的电脑上 我无法连接到http localhost 8080 另外 我可以跑步docker compose f docker compose development
  • wpf如何绑定到DataContext存在?

    我在代码中动态设置数据上下文 我希望屏幕上的按钮能够启用 禁用 具体取决于是否DataContext null或不 当我分配 DataContext 时 我可以在代码中执行此操作 但如果我可以像这样绑定那就更好了 您应该能够使用DataTr
  • 通过 .htaccess 更改根文件夹

    我有一个与域名关联的共享托管帐户 根文件夹 如果术语错误请纠正我 设置为 以便服务器上的所有文件都是公共的 可以通过浏览器访问 我可以使用 htaccess 或其他东西将根文件夹更改为类似的内容 example com public 如果我
  • numpy 数组行专业和列专业

    我无法理解如何numpy存储其数据 考虑以下 gt gt gt import numpy as np gt gt gt a np ndarray shape 2 3 order F gt gt gt for i in xrange 6 a
  • 如何用Java将wav文件分成1秒的片段?

    之前我有个问题 Java读取wav文件 https stackoverflow com questions 5210147 reading wav file in java 首先 我想用 Java 读取一个 wav 文件并将其字节处理到一个
  • DataTables 服务器端分页

    我有工作 Spring REST 应用程序与客户端分页 默认由 DataTables 和一切正常 现在我需要将其更改为服务器端分页 我遇到了问题 因为不知道如何从数据表中获取客户端想要查看的页码信息 我在 DT 手册中找不到任何有用的内容
  • 对数组进行排序以避免相邻项具有重复属性

    我有一系列对象 每个对象都有一个颜色属性 可以是 红色 蓝色 黄色 绿色 橙色 或 紫色 数组中有 20 30 个对象 因此颜色重复 我的目标是对数组进行排序 以便没有颜色彼此相邻 颜色的分布并不完全均匀 但很接近 这是我到目前为止所拥有的
  • vim 过滤器和 stdout/stderr

    当我使用 通过过滤器运行文件的内容 过滤器失败 它返回除 0 之外的另一个代码 并向 stderr 打印一条错误消息 我的文件被此错误消息替换 如果过滤器返回指示错误和 或忽略过滤器程序写入 stderr 的输出的状态代码 是否有办法告诉
  • 使用 VSTO 对 Excel 插件进行单元测试

    我一直在尝试测试我的插件但没有成功 即使在查看了各种来源之后MSDN https blogs msdn microsoft com varsha 2010 08 17 writing automated test cases for vst
  • WCF 方法被调用两次

    我有一个将数据返回到桌面应用程序的网络服务 我遇到的问题是 当网络服务返回少量数据时 一切正常 但当数据量很大时 它会抛出以下异常 System Net WebException 基础连接已关闭 接收时发生意外错误 当我调试 Web 服务时
  • 以编程方式检查 DLL/EXE 文件是否使用authenticode 签名的最佳方法是什么?

    我不想验证证书 我想在构建服务器上使用它来检查所有文件并列出我们可能忘记签名的文件 怎么样使用Get AuthenticodeSignature http technet microsoft com en us library dd3476
  • 我想在 SQL 中使用递归返回新列?

    我有一个表格 其列如下所示 Employee ID Manager ID E068 E067 E071 E067 E229 E069 E248 E144 E226 E223 E236 E241 E066 E001 E067 E001 E14