Как вытащить корневой элемент в таблице, ссылающейся на себя внешним ключом? (петля?) - PullRequest
0 голосов
/ 08 января 2019

Например, допустим, у вас есть таблица Person, например:

Id  Name    Birthdate   Parent
1   Hans    1960/10/15  null
2   Svend   1985/01/23  1
3   Peter   2004/03/02  2

Родитель - это внешний ключ в таблице Person.
Я хочу вернуться к старшему родителю, начиная с ребенка. Например, начиная с Питера, возможно ли получить Ганс в SQL?

Между начальной и конечной строками может быть несколько десятков промежуточных строк.

1 Ответ

0 голосов
/ 08 января 2019

Рекурсивное CTE (Рекурсивное общее табличное выражение) будет делать то, что вы хотите:

with recursive
x as (
  select *, 1 as my_level from my_table where id = 3 -- Peter's id
  union all
  select
    t.*, x.my_level + 1
  from my_table t
  join x on x.parent = t.id
)
select * from x order by my_level desc limit 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...