Табличная функция для родительского идентификатора - PullRequest
0 голосов
/ 18 июня 2020

Итак, у меня есть таблица базы данных, которая выглядит как -

MemberId    LinkedMemberId
1           1
2           1
3           1
4           2
5           4
6           4

И я хочу создать функцию значения таблицы, в которой я могу передать 1, 2, 3, 4, 5 или 6, и она будет вернуть все значения, потому что они связаны.

Пример - я передаю 4, поэтому мне нужно 2, мой LinkedMemberId. Теперь, поскольку у меня 2, я также хочу LinkedMemberId из 1. И теперь, поскольку у меня есть 1, я также хочу, чтобы MemberIds ассоциировался с LinkedMemberId из 1.

Есть ли уже алгоритм для получить такие данные?

1 Ответ

0 голосов
/ 18 июня 2020

Похоже, вы ищете иерархический запрос, который извлекает всех родителей данного узла. Типичный подход - это рекурсивное выражение общей таблицы:

with cte as (
    select LinkedMemberId, 1 lvl from mytable where memberId = ?
    union all
    select t.LinkedMemberId, c.lvl + 1
    from mytable t
    inner join cte c on c.LinkedMemberId = t.memberId
)
select * from cte

Это дает вам по одной строке для каждого родителя ввода memberId (который представлен ? в запросе). В качестве бонуса второй столбец содержит возрастающее целочисленное значение, которое представляет уровень родительского элемента в иерархии (начиная с 1 для родительского элемента первого уровня).

...