【发布时间】:2021-12-27 20:52:32
【问题描述】:
从许多不同的孩子中找到第一个共同的父母(如果有的话)。
例子:
1
/ \
2 3
/ / \
7 8 9
/ \
10 11
输入:[10, 9]
输出:3(此元素的第一个公共父级)
表格示例:
+------------------+-----------+------+
|EmployeePositionId|Subdivision|Parent|
+------------------+-----------+------+
|4718 |485 |42 |
|4719 |5064 |485 |
|4720 |5065 |5064 |
|4721 |5065 |5064 |
|4722 |3000 |null |
+------------------+-----------+------+
如果我尝试搜索EmployeePositionId [4719, 4720, 4721],
我想获得Subdivision 5064,因为它是两个员工最接近的公共细分(5065 嵌套在 5064 中)。
如果我要查找 4719、4720、4721、4722,那么我想获取 null,因为这些元素没有共同的父元素。
或者答案将帮助我如何获取数据以便以后在 Python 中解决这个问题
【问题讨论】:
-
基于什么逻辑?请更具体并提供更多详细信息。
-
表中是否有层次等级的指标?树的完整性是否得到保证(无循环)?输入ID的最小/最大数量?表中是否存在所有输入 ID?您的 Postgres 版本?
-
我找到了这个,但它只查看两个 id,而不是变量号。 stackoverflow.com/questions/608076/…
-
– Maciej Los,有必要按员工找到最近的综合部门,如果有的话
-
– Erwin Brandstetter,表中没有层次指示符,但您可以在非递归部分的查询中添加它:如果有帮助,0 作为“级别”。绝对没有周期。这棵树“起来”了。最小输入 - 0,最大 - 不超过 1500。所有输入 ID 都存在于表中。 Postgres 10.11
标签: sql postgresql recursion tree recursive-query