【发布时间】:2020-12-24 23:03:37
【问题描述】:
我有一个客户表,其中可以有父子记录的层次结构。
客户表的结构类似于,
customer {
id integer,
user_id integer,
parent_id integer
}
给定一个 user_id,我知道如何获取层次结构中属于给定 user_id 的所有子用户。比如user_id值为100,
WITH RECURSIVE subordinates AS (
SELECT c1.*
FROM customer c1
WHERE c1.user_id = 100
UNION
SELECT c2.*
FROM customer c2
INNER JOIN subordinates s
ON s.id = c2.parent_id)
SELECT * FROM subordinates;
但我想将上述查询的输出限制为用户子集。因此,上述查询的第一个参数将是一个父 user_id(我们称之为parent_user),第二个参数将是一个 user_id 列表(我们称之为child_users)。
我想做的是,
- 迭代
child_users - 检查
child_users中的child_user是否是parent_user的子级 - 如果是,获取
child_user的整个子层次结构
以上 3 个步骤能否在单个 sql 查询中实现。请建议。
编辑
样本表数据可以,
id user_id parent_id
-----------------------
1 100 null
2 101 100
3 102 101
4 103 102
5 104 100
6 105 null
因此,在表格中给出上述数据,对于parent_user = 100 和child_users = [101, 105] 的输入值,我希望检索以下输出,
id user_id parent_id
-----------------------
2 101 100
3 102 101
4 103 102
带有id = 5 的记录不应成为输出的一部分,即使它有parent_id = 100,因为user_id 104 不在child_users 列表中。
【问题讨论】:
-
请提供样本数据和所需的输出
-
@eshirvana FYI 添加了示例数据和所需的输出。
标签: sql postgresql hierarchical-data recursive-query