SQL: Как получить всех потомков для определенного родителя?

Имеется такая таблица:

USERS

id name parent_id
1 John null
2 Bob 1
3 Mark 1
4 Sean 2
5 Leon 3
6 Fred 4
7 Irma 5
8 Lisa 5

Подскажите пожалуйста, как мне сделать выборку пользователя Mark и всех его потомков, включая потомков его потомков, чтобы в результате мне вернулся список пользователей с идентификаторами: 3, 5, 7, 8?


Ответы (1 шт):

Автор решения: Alexander Pavlov
with recursive hierarchy(id, name, parent_id) as (
  select * from users where id=3 -- Mark
  union all
  select users.* from users,hierarchy where users.parent_id = hierarchy.id 
)
select * from hierarchy 
→ Ссылка