我需要从单个表中返回树状结果.目前我使用connect by并开始确保返回所有正确的结果.
select id,parent_id
from myTable
connect by prior id = parent_id start with name = 'manager'
group by id, parent_id
order by parent_id asc
Run Code Online (Sandbox Code Playgroud)
但是我希望结果以树结构返回.因此,每次找到父行时,其子行将直接显示在其下方.然后转到下一个父母并执行相同操作
预期成绩
- Parent A
- child a
- child b
- Parent B
- child c
- child d
Run Code Online (Sandbox Code Playgroud)
实际结果
- Parent A
- Parent B
- child a
- child b
- child c
- child d
Run Code Online (Sandbox Code Playgroud)
是否可以在oracle中执行此操作?我的表使用parent_id字段来标识行何时具有父项.每一行还有一个排序顺序,它应该在其父级和一个唯一的Id下排序.
我正在使用Oracle DB
你想要的是使用ORDER SIBLINGS BY.您拥有的查询是按parent_id列排序,该列覆盖任何层次排序.
下面的查询应该按照您的要求执行:
with my_hierarchy_data as (
select 1 as id, null as parent_id, 'Manager' as name from dual union all
select 2 as id, 1 as parent_id, 'parent 1' as name from dual union all
select 3 as id, 1 as parent_id, 'parent 2' as name from dual union all
select 4 as id, 2 as parent_id, 'child 1' as name from dual union all
select 5 as id, 2 as parent_id, 'child 2' as name from dual union all
select 6 as id, 3 as parent_id, 'child 3' as name from dual union all
select 7 as id, 3 as parent_id, 'child 4' as name from dual
)
select id, parent_id, lpad('- ', level * 2, ' ') || name as name
from my_hierarchy_data
connect by prior id = parent_id
start with name= 'Manager'
order siblings by parent_id asc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |