在postgresql ltree中使用多个参数进行搜索

时间:2017-06-19 08:18:55

标签: postgresql ltree

我计划实现一个使用ltree作为多级分类的数据库。但是当我试图获得路径为x或y的条目时,我遇到了麻烦。

         new_table
+-------+--------+---------+
|  id   |  name  |   path  |
----------------------------
|   1   |    a   |   001   |
|   2   |    b   |   002   |
|   3   |    c   | 001.001 |
|   4   |    d   | 002.001 |
|   5   |    e   |   003   |
----------------------------

使用下面所述的表格,我想得到一个以001或002开头的id。但是我似乎无法获得正确的查询。

预期结果:1,2,3,4
这有效:select id from new_table where path <@ '001' or path <@ '002'
这没有(导致语法错误):select id from ingredient where ingredient_path <@ '001|002'

这使我感到困惑,documentation表示使用| (或)符号是可以接受的。

我对ltree很新,并希望我能得到一个很容易理解的答案。

2 个答案:

答案 0 :(得分:2)

符号| (或)在ltxtquery中可以接受,因此请使用ltree @ ltxtquery运算符:

select id from new_table where path @ '001|002'; -- find labels 001 or 002
-- or
select id from new_table where path @ '001*|002*'; -- find labels starting with 001 or 002

答案 1 :(得分:1)

尝试:

select id from new_table where path ~ '001|002.*'

根据文档,我认为或者不会为<@运营商工作

  

ltree&lt; @ ltree

|可以在lquery中使用