PostgreSQL 获取指定根节点及其所有子集的id

要获取所有子集的ID,您可以使用递归CTE(WITH RECURSIVE)查询来实现。以下是一个示例查询语句:

WITH RECURSIVE cte AS (
  -- 选择指定根节点ID的id和parent_id
  SELECT id, parent_id
  FROM your_table
  WHERE id = ? -- 填写根节点的ID

  UNION ALL

  -- 将your_table和CTE连接起来,并选择子节点的id和parent_id
  SELECT your_table.id, your_table.parent_id
  FROM your_table
  JOIN cte ON your_table.parent_id = cte.id
)

-- 从CTE中选择所有的id
SELECT id FROM cte;

在这个查询中,我们使用了递归CTE来逐级连接子集。它首先选择根节点id,并通过与父id匹配连接到下一级子集,然后持续递归直到没有更多的子集。

请将 your_table 替换为您的实际表名,并将 ? 替换为根节点的ID。

解释:

  • 这是一段使用递归查询的SQL语句,用于查询指定根节点ID下的所有子节点ID。
  • 使用了WITH RECURSIVE关键字来定义一个CTE(公共表达式)。
  • CTE的初始部分是一个SELECT语句,用于选择指定根节点ID的id和parent_id。
  • 然后使用UNION ALL关键字连接了另一个SELECT语句,该语句通过JOIN操作将your_table和CTE连接起来,其中连接条件是your_table.parent_id = cte.id。
  • 这样就形成了一个递归查询,不断地将子节点连接到CTE中,直到没有更多的子节点为止。
  • 最后,使用SELECT语句从CTE中选择所有的id。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值