Рекурсивный иерархический запрос в sql

У меня ниже таблица

TblMatrix

ID   ApproverId
--------------------
1    4
2    7
7    8
4    5
5    6

Я хочу написать запрос самосоединения, чтобы возвращать вывод ниже для любого ApproverId

Если я передам ApproverId как 6

Выход должен быть

ID
---
5
4
1

Если я передам ApproverId как 8

Выход должен быть

ID
---
7
2

Какую версию SQL вы используете? Кстати, «самосоединение» не описывает ваш вопрос так же, как «рекурсивный иерархический запрос».

Tim Biegeleisen 11.04.2018 12:50

@TimBiegeleisen Я использую SQL Server 2012 R2

punter 11.04.2018 12:56

Этот вопрос связан с состоянием родительских детей, не являющимся самостоятельным присоединением.

DS Passionate 11.04.2018 13:08
1
3
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использовать рекурсивный запрос

with rcte as
(
    select id from tblMatrix where approverId = 8
    union all
    select tblMatrix.id 
    from tblMatrix
    join rcte on tblMatrix.approverid = rcte.id
)
select * from rcte

демонстрация dbfiddle

Другие вопросы по теме