针对包含parent字段的表示层级结构的表,当指定叶子节点时,可以通过递归查询的方式查找到所有的父级节点
示例代码
with recursive result(root_pk, root_name, leaf_pk, leaf_name, root_level, path, parent) as (
select pk, name, p.pk, p.name, level, name::varchar(8192), parent
from partitions p where p.pk = '110'
union
select p2.pk, p2.name, self.leaf_pk, self.leaf_name, p2.level, (p2.name || '/' || self.path)::varchar(8192), p2.parent
from result self join partitions p2 on p2.pk = self.parent
)
select * from result r;
大概会打印如下内容:
此时如果需要可以加上where条件,只查询到指定层级的父级节点。 比如只查询到第二级父级节点,可以加上where条件:where root_level = 2