You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何实现三层父子层级自关联表查询

3级层级展平查询实现

你的表通过parent_place_id存储上下级关联,要展平祖父、父亲、孩子3层为单行,直接对同一张表做两次自连接即可,不需要复杂递归:

-- 假设表名为 place
SELECT
  gf.place_id    AS id_Grandfather,
  gf.name        AS name_Grandfather,
  dad.place_id   AS id_Dad,
  dad.name       AS name_Dad,
  child.place_id AS id_Child,
  child.name     AS name_child
FROM place child
-- 关联当前节点的父级(父亲层)
INNER JOIN place dad
  ON child.parent_place_id = dad.place_id
-- 关联父亲节点的父级(祖父层)
INNER JOIN place gf
  ON dad.parent_place_id = gf.place_id
-- 限定祖父为最顶层无上级的节点
WHERE gf.parent_place_id IS NULL;

补充说明

  • 上述语句只会返回完整3代链路的数据,如果需要保留不足3代的节点(比如没有祖父、只有父子两层的记录),把INNER JOIN替换为LEFT JOIN即可
  • 该写法仅适用于固定3层级的展平场景,如果后续需要支持任意深度的层级路径查询,可以使用对应数据库支持的递归CTE语法实现

内容的提问来源于stack exchange,提问作者Nguyễn Hoài Nam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 13:09:16