PostgreSQL单表递归查询:如何通过关联ID获取多层级数据?
PostgreSQL递归查询实现层级关联查询
假设你的表名为your_table(请替换为实际表名),可以通过WITH RECURSIVE实现你需要的递归查询,完整语句如下:
WITH RECURSIVE recursive_query AS ( -- 初始数据集:获取first_id='3'的所有记录 SELECT first_id, seconde_id FROM your_table WHERE first_id = '3' UNION ALL -- 递归迭代:将上一轮的seconde_id作为新的first_id查询 SELECT t.first_id, t.seconde_id FROM your_table t INNER JOIN recursive_query r ON t.first_id = r.seconde_id ) -- 输出所有层级的结果 SELECT * FROM recursive_query;
语法说明
- 初始查询块:返回
first_id='3'的原始结果,作为递归的起始数据集 - 递归连接块:通过
INNER JOIN将递归CTE中的seconde_id与原表的first_id关联,获取下一层级的记录,直到没有新数据返回 - UNION ALL vs UNION:如果你的数据存在重复记录,需要去重的话可以将
UNION ALL替换为UNION,但UNION ALL性能更优,适合不需要去重的场景
常见失败原因排查
如果之前使用WITH RECURSIVE未成功,可检查以下点:
- 字段拼写:确认
seconde_id(注意拼写是seconde而非second)和表名与实际一致 - 数据类型:如果
first_id是数值类型,不要加单引号,应写为WHERE first_id = 3 - 关联条件:确保递归部分的
t.first_id = r.seconde_id关联逻辑正确,这是递归的核心
内容的提问来源于stack exchange,提问作者JOE
相关产品推荐
相关产品推荐

