-1

ltree假设路径总是从根开始,如何从 Postgres中的类型中的给定路径获取直接子级?例如,如果给定的路径是A.B,列名ltreepath,那么我能想到的最好的方法是:

SELECT distinct(subpath(path, (SELECT distinct(nlevel('A.B'))), 1)) FROM test_ltree WHERE path ~ 'A.B.*{1,}';';

编辑:我只想返回孩子,没有父母在路上。

4

1 回答 1

2

这应该是微不足道的:

TABLE ltree;

 id │  path   
════╪═════════
  1 │ A
  2 │ A.B
  3 │ A.B.C
  4 │ A.B.D
  5 │ A.B.D.E
  6 │ A.F
(6 rows)

SELECT * FROM ltree
WHERE path ~ 'A.B.*{1}'::lquery;

 id │ path  
════╪═══════
  3 │ A.B.C
  4 │ A.B.D
(2 rows)

该查询查找 的所有直接子级A.B

如果A.B要从结果中省略 ,请使用subpath负偏移量:

SELECT subpath(path, -1)
FROM ltree
WHERE path ~ 'A.B.*{1}'::lquery;

 subpath 
═════════
 C
 D
(2 rows)

要在之后只获得下一个标签A.B,您可以尝试

SELECT DISTINCT subpath(subpath(path, nlevel('A.B')), 0, 1)
FROM ltree
WHERE path ~ 'A.B.*{1,}'::lquery;
于 2021-09-08T06:13:00.420 回答