PostgreSQL中查询指定根节点'0'的层级数据(含根节点)
PostgreSQL 获取指定根节点的所有子节点(含自身)
假设我们有如下结构的表(可替换为你的实际表名,这里以tree_nodes为例):
| Id | ParentId |
|---|---|
| 0 | null |
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| a | null |
| b | a |
要筛选出根节点为'0'的所有层级节点(包含根节点本身),可以用PostgreSQL原生支持的**递归CTE(WITH RECURSIVE)**实现,这是处理树形结构数据的标准方案:
WITH RECURSIVE node_tree AS ( -- 锚点:选中指定根节点作为递归起点 SELECT Id, ParentId FROM tree_nodes WHERE Id = '0' UNION ALL -- 递归:关联子节点,不断向下遍历 SELECT tn.Id, tn.ParentId FROM tree_nodes tn INNER JOIN node_tree nt ON tn.ParentId = nt.Id ) SELECT * FROM node_tree;
逻辑说明:
- 锚点部分先获取根节点
'0'; - 递归部分通过自连接,把当前节点的子节点(
tree_nodes中ParentId匹配递归结果集Id的记录)持续加入结果; UNION ALL保证所有层级的节点都被保留,直到没有子节点可遍历为止。
执行后得到的结果与预期一致:
| Id | ParentId |
|---|---|
| 0 | null |
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
如果你的表名、字段名不同,替换对应名称即可,无需依赖额外扩展。
内容的提问来源于stack exchange,提问作者zango123
相关产品推荐
相关产品推荐

