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

Откуда:
Сообщений: 891
Здравствуйте.
Есть таблица:

    declare @link table
    (
      child_ID int not null primary key clustered,
      parent_ID int not null
    );


заполняется таким запросом:
  insert into @link (child_ID, parent_ID)
  select TargetID, SourceID
    from LinksAre
   where LinkType = 2;


и содержит идентификаторы дочернего и родительского элемента. По сути это дерево. Мне нужно по начальному указанному идентификатору дочернего элемента, добраться до корня дерева.

Написал рекурсивный запрос
	WITH Links AS
	(
		select child_ID,
		       parent_ID
		  from @link 
		 where child_ID = 27015

		 union all 

		select k.child_ID,
		       k.parent_ID  
		  from @link k
		 INNER JOIN Links L ON k.child_ID = L.parent_ID
	)
	select parent_ID from Links 


который отработал верно. т.е. вернул мне набор данных, с правильным последним значением родительского элемента:

child_ID parent_ID
27015 26878
26878 26725
26725 26941
26941 27642
27642 26706


Как сделать так, чтобы возвращался не весь набор а только последнее значение parent_ID набора? (В моём случае 26706)
19 мар 19, 20:14    [21837748]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с рекурсией  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1364
MAULER,

WITH Links AS
	(
		select 
                       cast(1 as int) as rn,
                       child_ID,
		       parent_ID
		  from @link 
		 where child_ID = 27015

		 union all 

		select 
                       cast(l.rn+1 as int),
                       k.child_ID,
		       k.parent_ID  
		  from @link k
		 INNER JOIN Links L ON k.child_ID = L.parent_ID
	)
	select top(1) parent_ID from Links  order by rn desc
19 мар 19, 20:53    [21837775]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с рекурсией  [new]
MAULER
Member

Откуда:
Сообщений: 891
felix_ff,

благодарю, то что надо!
19 мар 19, 21:18    [21837786]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с рекурсией  [new]
MAULER
Member

Откуда:
Сообщений: 891
Подскажите пожалуйста,
а как мне быть, если надо пробежаться по таблице @task с ID-шниками и каждый ID-шник "подсунуть" вместо 27015 и получить корень другого дерева?

Возможно это сделать без курсора?
20 мар 19, 09:02    [21838032]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с рекурсией  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
MAULER
Подскажите пожалуйста,
а как мне быть, если надо пробежаться по таблице @task с ID-шниками и каждый ID-шник "подсунуть" вместо 27015 и получить корень другого дерева?

Возможно это сделать без курсора?
список "корней" и, соответственно, деревьев, которые будут построены, определяется в "якорной" части рекурсивного СТЕ (первая часть, до UNION ALL). Что там определите, такие деревья и получите.
20 мар 19, 09:10    [21838038]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить