ORACLEиспользуем
connect by priorот родителя
select
id,
pid,
name
from
myTable
start with id = /окорневой узел или с какого искать/
connect by prior id = pid
к родителю все тоже самое, только меняем
connect by prior pid = id
SQLвсе зависит от версии сервера, в 2000 напрямую запрос не сделать(надо писать ф-цию, или ХП, или, если конечное кол-во потомков, то нужное кол-во
left join), 2005 и выше используем
CTEот родителя
with myTree(id, pid, name) as (
select
id, pid, name
from
myTable
where
id = /окорневой узел или с какого искать/
union all
select
ch.id, ch.pid, ch.name
from
myTable ch
inner join myTree p on ch.pid = p.id)
select
id, pid, name
from
MyTree
к родителю все тоже самое, только меняем
inner join myTree p on ch.id = p.pid
PostgreSQL ничего не могу сказать, но, наверное, есть что-то подобное