SQL Получить всех родителей и потомков активного родителя - PullRequest
0 голосов
/ 08 мая 2020

Вот мой случай, у меня есть структура таблицы, например:

enter image description here

Я просто хочу получить всех активных родителей (т.е. запись с именем A, E и G) и их потомок.

Ожидаемый результат должен выглядеть так:

enter image description here

1 Ответ

0 голосов
/ 08 мая 2020
with recursive as (
SELECT      par.Id, 
            par.Name, 
            par.ParentID, 
            par.IsDeleted  
FROM        table1 par 
JOIN  table1 chi 
  ON        par.Id = chi.ParentId  

union all 

SELECT      par.Id, 
            par.Name, 
            par.ParentID, 
            rec.IsDeleted  
FROM        table1 par 
JOIN  recursive rec 
  ON        rec.Id = par.ParentId  
),

check_tbl as (
       select Id,
       sum(IsDeleted) as IsDeleted
from recursive
group by Id
having sum(IsDeleted)=0
)

select table1.id, Name, ParentID, table1.IsDeleted
from check_tbl join table1 on table1.Id=check_tbl.Id
;
...