Допустим, у меня есть что-то похожее на это (иерархия папок на диске C :).
Я хочу получить верхнюю папку данной папки (в данном случае я выбрал '1'
), а не сам диск, как мне это сделать?
Иерархия может иметь различные уровни.
with data as
(
select '1' name, 'folder' type, 'docs' parent from dual union
select '2' name, 'folder' type, 'docs' parent from dual union
select '3' name, 'folder' type, 'docs' parent from dual union
select 'docs' name, 'folder' type, 'MyFolder' parent from dual union
select 'MyFolder' name, 'folder' type, 'C:\' parent from dual union
select 'C:\' name, 'Drive' type, null parent from dual
)
select name, level from data
start with name = '1'
connect by prior parent = name
order by level;
ожидаемый вывод: 'Myfolder'
, так как у него нет другой папки в качестве родительского.