postgresql递归查找树结构
在PostgreSQL中,可以使用递归的公用表表达式(CTE)来递归查询树状结构的数据。以下是一个例子,假设我们有一个名为categories
的表,它有两个字段id
和parent_id
,其中parent_id
表示父类别的ID。
WITH RECURSIVE sub_categories AS (
SELECT id, parent_id, name
FROM categories
WHERE id = :starting_category_id -- 起始节点
UNION ALL
SELECT c.id, c.parent_id, c.name
FROM categories c
INNER JOIN sub_categories sc ON sc.id = c.parent_id -- 连接条件
)
SELECT * FROM sub_categories;
在这个查询中,:starting_category_id
是你想要开始递归查询的节点的ID。sub_categories
是一个CTE,它首先选择起始节点,然后通过UNION ALL
和内部JOIN
与已有结果进行连接,以递归查找所有子节点。
如果你想要查找所有的子节点,可以将WHERE
子句中的条件改为parent_id = :starting_category_id
。如果你想要查找所有的父节目,可以将WHERE
子句中的条件改为id = :starting_category_id
,并在UNION ALL
部分反转连接条件sc.id = c.parent_id
。
评论已关闭