PostgreSQL 11递归查询问题:指定单元及其子单元查询结果错误
PostgreSQL 11递归查询指定单元及其子单元的正确实现
你的问题出在递归查询时使用了非精确的字符串匹配逻辑,导致ID包含"UN-25"的UN-255被错误纳入结果集。以下是修正后的精确递归查询方案:
正确的递归CTE查询代码
WITH RECURSIVE unit_hierarchy AS ( -- 锚点:选中目标根单元UN-25 SELECT id, parentid FROM unit WHERE id = 'UN-25' UNION ALL -- 递归:精确匹配子单元的parentid与上层节点的id SELECT u.id, u.parentid FROM unit u INNER JOIN unit_hierarchy uh ON u.parentid = uh.id ) SELECT id, parentid FROM unit_hierarchy;
逻辑说明
- 锚点成员直接定位到根节点
UN-25,作为递归的起始点。 - 递归成员通过严格相等判断(
u.parentid = uh.id)关联子节点,只会返回parentid完全等于上层节点ID的记录,彻底避免了字符串包含关系带来的误匹配问题。
执行该查询后,会准确返回期望的结果:
| id | parentid |
|---|---|
| UN-25 | |
| UN-30 | UN-25 |
| UN-31 | UN-25 |
| UN-40 | UN-30 |
| UN-41 | UN-30 |
内容的提问来源于stack exchange,提问作者franco
相关产品推荐
相关产品推荐

