2017-06-19 17 views
2

複数レベルの分類としてltreeを使用するデータベースを実装することを計画しました。しかし、パスxまたはyでエントリを取得しようとすると問題に遭遇しました。表とpostgresql ltreeで複数のパラメータを使用して検索

  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'
これは(構文エラーになる)しません:documentationが使用していることを述べたようにselect id from ingredient where ingredient_path <@ '001|002'

これは混乱して私を残し| (または)記号は使用できます。

私は、ltreeにとって非常に新しく、わかりやすい答えを得ることを望んでいます。

答えて

0

試してみてください。

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

OR私は、ドキュメントごとに、考えて<@オペレータのために動作しません

ltree < @ ltree

|lquery代わり

+0

に含まれます!これは1つの作品:D –

1

記号| (または)そうltree @ ltxtquery演算子を使用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 
+0

で使用することができますがあり、これらの2の問題は、しかしである「003.001」パスがあるとき、「003.001」はまだありがとうクエリ結果 –

関連する問題