Oracle 通过显示叶节点的路径显示树的层次结构

Oracle 通过显示叶节点的路径显示树的层次结构,oracle,Oracle,我想在oracle中编写一个查询,这样我就可以在一行中获得我的树层次结构,并且只显示最后一个节点路径,就像我有一个id和它的父id一样 id parent_id 1 null 2 1 3 2 4 3 5 4 6 5 输出应该在一行中,就像 路径 使用函数sys\u conne

我想在oracle中编写一个查询,这样我就可以在一行中获得我的树层次结构,并且只显示最后一个节点路径,就像我有一个id和它的父id一样

id                parent_id
1                 null
2                 1
3                 2
4                 3
5                 4
6                 5
输出应该在一行中,就像 路径


使用函数sys\u connect\u by\u path()和伪列
connect\u by\u is\u leaf

select id, ltrim(sys_connect_by_path(id, '-'), '-') path
  from test where connect_by_isleaf = 1
  connect by prior id = parent_id
  start with parent_id is null
输出和输出:


编辑:
where
子句在这里很自然,但出于某种原因,您绝对不想要它。您可以使用:

select id, path from (
  select id, ltrim(sys_connect_by_path(id, '-'), '-') path, connect_by_isleaf leaf
    from test connect by prior id = parent_id
    start with parent_id is null)
  connect by 1=0 start with leaf = 1

您可以发布一些示例数据,以及您迄今为止尝试过的内容吗?thanksI使用了此查询选择id、父级id、级别、系统连接路径(id,“/”)“路径”从层次结构2开始,id=1连接之前的id=父级id;但它给出的是整个路径,如-1-1-2-1-2-3-1-2-3-4-1-2-3-4-5,这样可以通过cte(公共表表达式)完成吗假设我有两个树状id parent_id 1 null 2 1 3 4 3 5 6 7 6 8 3 9 8 10 9 11 10,现在的输出应该类似于路径1-2-3-4-5-6-7 1-2-3-8-9-10-11我不想使用where子句,现在还有另一件事,比如说我有两个树状id parent_id 1 null 2 1 3 2 4 3 5 6 7 6 8 3 9 8 10 9 1110现在的输出应该像路径1-2-3-4-5-6-7 1-2-3-8-9-10-11我如何显示它?这正是我的查询的工作方式-你可以在中看到它
其中connect\u by\u isleaf=1
表示:仅显示叶行-因此在本例中,这些将是id 7和11的路径。是的,使用…子句将内部查询移动到
,如下所示:,第二个查询使用CTE。但是该查询使用的是connect by PREVIOR…它如何成为ansi标准,或者它如何正确使用CTE,因为它使用的是connect by我使用的是不存在的,尽管有减号,但它不工作…减号有任何替代方法吗??
ID   PATH
---  ---------------
  6  1-2-3-4-5-6
select id, path from (
  select id, ltrim(sys_connect_by_path(id, '-'), '-') path, connect_by_isleaf leaf
    from test connect by prior id = parent_id
    start with parent_id is null)
  connect by 1=0 start with leaf = 1
select  LISTAGG(id, '-') WITHIN GROUP (ORDER BY id) from trea_sort connect by PRIOR  id = parent start with parent is null