Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Рекурсивная таблица

6.0K
22 сентября 2008 года
Balda
79 / / 12.05.2008
Есть таблица Subdiv, состоящая из столбцов ID,Name, ID_Parent
(ID_Parent ссылается на ID родительской строки).
По этой таблице програмно формируется дерево подразделений. Количество "веток" в каждом узле дерева разное.
Пользователь выбирает один узел дерева, т.е. одну строку таблицы подразделений. Создается параметр @id, который равен ID выбранной строки.
Необходимо вывести всех служащих, которые работают в выбранном подразделении.
Вот как это было реализовано:
1). Програмно подсчитываю максимальное количество веток в узле;
2). В зависимости от этого количества формирую запрос. Например для узла с максимальным количеством веток = 3 запрос будет выглядеть следующим образом:
Код:
SELECT  
Employees.Surname,
Subdiv.Name

FROM
Employees
LEFT JOIN Subdiv on Employees.ID_emp=Subdiv.ID
INNER JOIN
(select distinct * from Subdiv) sel1 ON sel1.ID= Subdiv.ID_Parent
INNER JOIN
(select distinct * from Subdiv) sel2 ON sel2.ID= sel1.ID_Parent
INNER JOIN
(select distinct * from Subdiv) sel3 ON sel3.ID= sel2.ID_Parent

WHERE
(Subdiv.ID=@id OR sel1.ID=@id OR sel2.ID=@id OR sel3.ID=@id)

Все остальные запросы создаються аналогично.

Теперь в чем проблема:
при максимальном количестве веток больше 2-х отображаються не все записи. Может быть логика запроса в чем-то не верна?:confused:
5
22 сентября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Balda
Может быть логика запроса в чем-то не верна?:confused:

Попробуйте выполнить ту же задачу с использованием хранимки.
Имеется в виду программный обход дерева и сбор данных во временную таблицу.

6.0K
23 сентября 2008 года
Balda
79 / / 12.05.2008
MS SQL Server 2005.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог