Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка старшего узла в лесу с таким же значением поля, как и у его потомка  [new]
ArranHawk
Member

Откуда:
Сообщений: 3
Есть лес деревьев, уровней пять-шесть. У каждого узла есть ссылка на его непосредственного родителя, в виде ParentId, у корней соответственно ParentId равен NULL. Также у каждого узла дерева есть поле с определенной информацией, скажем Type, которое не может быть равно NULL. Необходимо сделать выборку, в которой у каждого узла будет проставлен Id самого старшего узла-прародителя, у которого в поле Type стоит тоже значение, что и у данного узла-потомка.
Данную задачу вообще возможно реализовать через рекурсивное CTE или надо искать другие пути?
1 июн 15, 18:17    [17716937]     Ответить | Цитировать Сообщить модератору
 Re: Выборка старшего узла в лесу с таким же значением поля, как и у его потомка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8300
Разумеется, можно, т.к. код родителя легко протянуть через всех потомков отдельным полем.
1 июн 15, 18:28    [17716977]     Ответить | Цитировать Сообщить модератору
 Re: Выборка старшего узла в лесу с таким же значением поля, как и у его потомка  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
ArranHawk,

тестовый набор данных напишите, чтобы можно было показать
1 июн 15, 18:40    [17717013]     Ответить | Цитировать Сообщить модератору
 Re: Выборка старшего узла в лесу с таким же значением поля, как и у его потомка  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20959
При помощи CTE несложно получить выборку, в которую соберётся:

узел
его Type
его родитель (не обязательно непосредственный)
Type этого родителя

Останется сделать отбор по равенству Type и, сгруппив по узлу, выбрать самого "верхнего" из родителей.
1 июн 15, 18:55    [17717073]     Ответить | Цитировать Сообщить модератору
 Re: Выборка старшего узла в лесу с таким же значением поля, как и у его потомка  [new]
ArranHawk
Member

Откуда:
Сообщений: 3
Таблица вида
IdParentIdType
1NULL1
211
312
432
541
6NULL1
761

Итоговая выборка такого вида
IdRootId
1NULL
21
3NULL
43
51
6NULL
76
1 июн 15, 19:00    [17717091]     Ответить | Цитировать Сообщить модератору
 Re: Выборка старшего узла в лесу с таким же значением поля, как и у его потомка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8300
ArranHawk, если хотите NULL, тогда левое объединение результата CTE с исходной таблицей по коду корня и типу корня.
1 июн 15, 19:10    [17717113]     Ответить | Цитировать Сообщить модератору
 Re: Выборка старшего узла в лесу с таким же значением поля, как и у его потомка  [new]
ArranHawk
Member

Откуда:
Сообщений: 3
Akina, огромное спасибо.
1 июн 15, 19:32    [17717195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить