powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с рекурсией
5 сообщений из 5, страница 1 из 1
Помогите пожалуйста с рекурсией
    #39788641
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Есть таблица:

Код: sql
1.
2.
3.
4.
5.
    declare @link table
    (
      child_ID int not null primary key clustered,
      parent_ID int not null
    );



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



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

Написал рекурсивный запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	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_ID27015 2687826878 2672526725 2694126941 2764227642 26706

Как сделать так, чтобы возвращался не весь набор а только последнее значение parent_ID набора? (В моём случае 26706)
...
Рейтинг: 0 / 0
Помогите пожалуйста с рекурсией
    #39788659
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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
...
Рейтинг: 0 / 0
Помогите пожалуйста с рекурсией
    #39788668
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

благодарю, то что надо!
...
Рейтинг: 0 / 0
Помогите пожалуйста с рекурсией
    #39788784
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста,
а как мне быть, если надо пробежаться по таблице @task с ID-шниками и каждый ID-шник "подсунуть" вместо 27015 и получить корень другого дерева?

Возможно это сделать без курсора?
...
Рейтинг: 0 / 0
Помогите пожалуйста с рекурсией
    #39788788
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERПодскажите пожалуйста,
а как мне быть, если надо пробежаться по таблице @task с ID-шниками и каждый ID-шник "подсунуть" вместо 27015 и получить корень другого дерева?

Возможно это сделать без курсора?список "корней" и, соответственно, деревьев, которые будут построены, определяется в "якорной" части рекурсивного СТЕ (первая часть, до UNION ALL). Что там определите, такие деревья и получите.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с рекурсией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]