我计划实现一个使用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很新,并希望我能得到一个很容易理解的答案。
答案 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
中使用