基于Oracle中的叶子从层次结构树中提取子树

基于Oracle中的叶子从层次结构树中提取子树,oracle,tree,hierarchical-data,connect-by,Oracle,Tree,Hierarchical Data,Connect By,我有一个表users,表示如下层次结构树: 纵队 类型 评论 用户id 整数 序列 用户类型 整数 1用于用户组2用于普通用户 组id 整数 对同一表中用户类型为1的用户的引用 用户名 瓦查尔(xxx) 您可以使用connectby朝相反方向行走。那么级别当然也会相反。因此,要以正确的顺序和缩进获得结果,请基于这些结果链接另一个查询,该查询将使用row\u number()确定缩进: with base as ( select u.user_name, u.user_id,

我有一个表
users
,表示如下层次结构树:

纵队 类型 评论 用户id 整数 序列 用户类型 整数 1用于用户组2用于普通用户 组id 整数 对同一表中用户类型为1的用户的引用 用户名 瓦查尔(xxx)
您可以使用
connectby
朝相反方向行走。那么
级别
当然也会相反。因此,要以正确的顺序和缩进获得结果,请基于这些结果链接另一个查询,该查询将使用
row\u number()
确定缩进:

with base as (
  select 
    u.user_name,
    u.user_id, 
    u.group_id, 
    u.user_type,
    level as lvl
  from users u
  connect by prior u.group_id = u.user_id
  start with u.user_id = 13
)
select 
  lpad('-', (row_number() over (order by lvl desc) - 1) * 2, ' ') || base.user_name
    as padded_name,
  user_id,
  group_id,
  user_type
from base
order by lvl desc;