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

Откуда: Дубна
Сообщений: 295
Проштудировал следующие темы:
http://msdn.microsoft.com/ru-ru/library/ms186243.aspx
https://www.sql.ru/forum/actualthread.aspx?tid=859155

Однако как человек только посвящающийся, прошу помочь, т.к. всё равно осталось недопонимание:

-Обязательно использовать рекурсия с конструкцией WITH? Может существовать просто рекурсивный запрос без WITH?
-Если в дереве верхних элементов несколько, но у каждого свои дети. У меня есть номер ребёнка и нужно получить самого верхнего предка именно этого дитя. Т.е. как передать в рекурсивный запрос номер дитя, по которому собираюсь искать предка?
-Насколько выгоднее использование рекурсивного запроса, чем написать обычную функцию.

Своял пока вот такое нечто:

WITH DirectReport(ID, Parent_ID) AS
(
SELECT id_podr, code_parent,
FROM s_podr
WHERE code_parent IS NULL
UNION ALL
SELECT p.id_podr, p.code_parent
FROM s_podr p
INNER JOIN DirectReport d
ON p.ID= d.ID
)
SELECT ID, Sort
FROM DirectReports
22 июн 11, 13:17    [10853736]     Ответить | Цитировать Сообщить модератору
 Re: Использование рекурсивного запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Алексей Ку.,

"номер ребёнка" - это ID?
Вот и сделайте его начальним узлом дерева.
И раскручивайте в сторону предков, пока Parent_ID IS NOT NULL.
22 июн 11, 13:22    [10853792]     Ответить | Цитировать Сообщить модератору
 Re: Использование рекурсивного запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Алексей Ку.,

"номер ребёнка" - это ID?
Вот и сделайте его начальним узлом дерева.
И раскручивайте в сторону предков, пока Parent_ID IS NOT NULL.
Останется выбрать записи, для которых Parent_ID IS NULL.
22 июн 11, 13:24    [10853808]     Ответить | Цитировать Сообщить модератору
 Re: Использование рекурсивного запроса  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Честно говоря это писалось с примера. Я вообще как-то не совсем понимаю где тут возникает сама рекурсия.
И можно избежать конструкции WITH?
22 июн 11, 13:27    [10853828]     Ответить | Цитировать Сообщить модератору
 Re: Использование рекурсивного запроса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Алексей Ку.
Честно говоря это писалось с примера. Я вообще как-то не совсем понимаю где тут возникает сама рекурсия.

Тогда читать "Recursive Queries Using Common Table Expressions" ( ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10de_1devconc/html/4acf8a3e-6dcc-420c-9088-9c57b976113e.htm )
Алексей Ку.
И можно избежать конструкции WITH?
With является неотъемлемой частью рекурсивного cte. Т.е. любо с with, либо рекурсию любым другим способом.

Сообщение было отредактировано: 22 июн 11, 13:40
22 июн 11, 13:32    [10853884]     Ответить | Цитировать Сообщить модератору
 Re: Использование рекурсивного запроса  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Гавриленко Сергей Алексеевич,
Спасибо.

Вектор движения получен! В принципе вопросы пока отпали до окончания изучения темы. Всем спасибо!
22 июн 11, 13:40    [10853951]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить