иерархические записи с использованием sql - PullRequest
1 голос
/ 30 апреля 2020

У меня есть таблица, подобная этой

**id    exType               exId   depType              depId**    
  1     Ceo                  1      Board Of Director      1    
  2     Board Of Director    1      Manager                4    
  3     Board Of Director    1      Manager                5    
  4     Manager              4      TeamLead               1    
  5     Manager              5      TeamLead               2    
  6     TeamLead             1      Member                 7    
  7     TeamLead             1      Member                 8    
  8     TeamLead             1      Member                 9    
  9     TeamLead             1      Member                 10   
  10    TeamLead             2      Member                19

Я хочу, чтобы все члены были, когда я предоставляю входные данные в качестве exType в качестве менеджера, а exId как 4, я хочу

                                    Member                 7    
                                    Member                 8    
                                    Member                 9    
                                    Member                 10   

или я хочу все член, когда я даю входные данные в виде exType как teamlead и exId как 1, я хочу

                                    Member                 7    
                                    Member                 8    
                                    Member                 9    
                                    Member                 10   

или или я хочу, чтобы все участники входили в качестве exType в качестве генерального директора и exId как 1, я хочу

                                    Member                 7    
                                    Member                 8    
                                    Member                 9    
                                    Member                 10   

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете использовать рекурсивный запрос для отображения всех зависимостей данного узла:

with recursive cte as (
    select depType, depId 
    from mytable 
    where exType = 'Manager' and exId = 4
    union all
    select t.depType, t.depId
    from cte c
    inner join mytable t on t.exId = c.depId and t.exType = c.depType
)
select * from cte
...