仅检索具有特定类型的单个祖先节点的记录

问题描述 投票:0回答:1

我有一个 postgres 数据库。 里面有一张桌子,叫做

structure

结构表中有一个 ltree 字段,称为

path
。 它保存如下数据

f55219.f55468.f55635.f44939.p10900.f45675.p10902
f55219.f55468.f43355.f55340.p12120
f55219.f55468.f55635.f44939.p11153.f46590.p11222
f55219.f55468.f43355.f48299.p11620

我正在尝试弄清楚如何查询结构表以仅返回 ltree 中具有单个“p*”值的记录。 在我上面粘贴的数据中,这是第二行和第四行。

如果重要的话,数据中的两个 p* 记录之间可以有任意数量(0 - 无穷大)的 f* 记录。

感谢您的帮助!

postgresql ltree
1个回答
0
投票

类似的东西应该有效:

with structure(path) as (values
('f55219.f55468.f55635.f44939.p10900.f45675.p10902'::ltree),
('f55219.f55468.f43355.f55340.p12120'),
('f55219.f55468.f55635.f44939.p11153.f46590.p11222'),
('f55219.f55468.f43355.f48299.p11620')
)

select * from structure where path ~ '*.p*.*' and not (path ~ '*.p*.*.p*.*');
                path
------------------------------------
 f55219.f55468.f43355.f55340.p12120
 f55219.f55468.f43355.f48299.p11620
(2 rows)

第一个条件搜索至少具有一个以

p
字母开头的标签的路径。其次 - 搜索没有 2 个以“p”开头的标签的路径。

© www.soinside.com 2019 - 2024. All rights reserved.