0

我有一个带有一LTREE列的表,数据如下所述。

ID  Label  Path
1.  ABC.   1
2.  DEF.   1.2
26. GHI.   1.2.26

假设我想找到标记为 的节点的所有祖先GHI。我正在使用的查询是

SELECT *
    FROM
        my_table as tbl
    WHERE
        tbl.path @> (
            SELECT
                path 
            FROM
                my_table 
            WHERE
                id=26
        ) 

但是,这仅返回最后一行,而我想要所有三行。我究竟做错了什么?

4

2 回答 2

0

要查找给定路径的所有后代,请使用 <@ 运算符

SELECT *
FROM my_table as tbl
WHERE path <@ '1.12.26'

欲了解更多信息https://www.postgresql.org/docs/current/ltree.html#LTREE-OP-TABLE

于 2021-02-15T19:59:44.280 回答
0

我也是 Ltree 的新手,但我想我可以帮助你!

您的设置应与 Ltree 的 GIST 索引匹配。参见F.21.3官方文档的部分。https://www.postgresql.org/docs/current/ltree.html

我相信没有它,运营商将无法正确弄清楚您想要什么。除此之外,查询似乎是正确的。我在我的本地环境中运行了相同的代码(尽管我使用的是最新版本的 Postgres)。

于 2020-03-20T10:23:41.523 回答