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

Откуда:
Сообщений: 62
есть древовоидная структура, любая вложенность ну или для примера пусть будет 5
как можно запросом вывести всех родителей у записи? и можно ли вобще?
7 сен 11, 11:54    [11239534]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дереву  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
kubgurov
есть древовоидная структура, любая вложенность ну или для примера пусть будет 5
как можно запросом вывести всех родителей у записи? и можно ли вобще?

Если у вас версия >= 2005, то можно одним запросом через CTE (Common Table Expressions ). В BOL в примерах к CTE есть решение обратной задачи (получить всех "детей"), но очень просто ее "перевернуть" - найти всех "родителей".
С уважением, Алексей
7 сен 11, 12:07    [11239695]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дереву  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
А если версия >=2008 смотрите hierarchyid. Может вам будет проще структуру таблицы изменить, кто знает... Тогда ваша задача сведется к интепретации значений одной ячейки таблицы. А так - да, рекурсив-CTE - наше ФСЕ! ;)
7 сен 11, 12:54    [11240072]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дереву  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Эту и аналогичные задачи ИНОГДА удобнее решать неким трюком. Но! Для него требуется в наборе данных для каждого узла его полный "адрес" - путь от вершины дерева из айдишников всех по порядку вышестоящих вершин. Тогда все потомки, родители и т.п. находятся при помощи LIKE адреса текущего узла по этому полю, дополненному слева, справа %.
7 сен 11, 12:55    [11240080]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дереву  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Программист-Любитель
Эту и аналогичные задачи ИНОГДА удобнее решать неким трюком. Но! Для него требуется в наборе данных для каждого узла его полный "адрес" - путь от вершины дерева из айдишников всех по порядку вышестоящих вершин. Тогда все потомки, родители и т.п. находятся при помощи LIKE адреса текущего узла по этому полю, дополненному слева, справа %.
Уж лучьше тогда дерево Cелко использовать.
7 сен 11, 13:06    [11240174]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дереву  [new]
iljy
Member

Откуда:
Сообщений: 8711
Программист-Любитель,

ну вообще hierarchyid так и работает, разница лишь, что там поле бинарное и, соответственно, не LIKE, а IsDescendantOf.
7 сен 11, 13:06    [11240178]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дереву  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
alexeyvg
Уж лучьше тогда дерево Cелко использовать.
У него не эффективно вставлять данные.
hierarchyid в этом смысле венец алтернативного подхода.
Cелко всего лищь далёкий прадед канувший в лету.
7 сен 11, 16:26    [11242301]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дереву  [new]
Bobby
Member

Откуда:
Сообщений: 638
kubgurov, проблему решили? могу кинуть алгоритм
7 сен 11, 16:45    [11242488]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить