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

Откуда:
Сообщений: 41
Здравствуйте. Нужно найти конечного потомка. Такая таблица допустим.
CREATE TABLE table1(sess_id int, bl_sess_id int);
	
INSERT INTO table1
	([sess_id], [bl_sess_id])
VALUES
(78,394),(81,301),(100,379),(159,271),(195,288),
(202,334),(204,301),(215,389),(217,357),(269,301),
(271,502),(280,334),(301,271),(318,195),(323,301),(326,357),(334,204),(343,02),
(346,195),(349,542),(350,0),(357,301),
(365,404),(366,100),(372,404),(373,301),(374,301),(375,0),(379,334),(381,202),
(389,269),(394,357),(399,349),(403,349),
(404,560),(411,487),(426,373),(428,373),(432,487),(442,0),(453,301),
(457,204),(466,349),(470,366),(474,426),(481,301),(487,564),(491,349),(497,301),(502,271);

Пойдём с первого. 78-394-357-301-271-502-271. Нужен, по сути, 502.
Как-нибудь без рекурсии обойтись можно?
26 мар 20, 17:02    [22106456]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4364
Earl11,

А чем рекурсия плоха?

https://www.sql.ru/forum/1322566/rekursiya-s-dublyami

Сообщение было отредактировано: 26 мар 20, 17:09
26 мар 20, 17:09    [22106459]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
Earl11
Member

Откуда:
Сообщений: 41
a_voronin,
по заданию желательно сделать без неё. Да и не особо понимаю как)
26 мар 20, 17:24    [22106468]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
Earl11
Как-нибудь без рекурсии обойтись можно?
Можно. Любая рекурсия заменяется циклом.
26 мар 20, 17:32    [22106472]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4364
Earl11,

Курсоры вам в руки.
26 мар 20, 17:38    [22106480]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
Earl11
Member

Откуда:
Сообщений: 41
Это, например, как реализовать?
26 мар 20, 18:18    [22106501]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
Earl11
Member

Откуда:
Сообщений: 41
Никто не подскажет?
27 мар 20, 13:58    [22106909]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
a_voronin
Курсоры вам в руки.
Не, курсор тут ни к чему не прилепить, тут нужен просто цикл.
Earl11
Никто не подскажет?
Что, как пишутся циклы?

Это же азы программирования.
Возьмите учебник по программированию на T-SQL, и проходите главу за главой, там циклы будут рассмотрены.
Хотя, циклы есть в любом курсе программирования начального уровня.
27 мар 20, 16:59    [22107048]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
Earl11
Member

Откуда:
Сообщений: 41
alexeyvg, так вопрос в чём: идёт цепочка допустим 78-394-357-301 и выходит такой момент 271-502-271-271-502-271 и дальше всё вокруг двух значений. И каждый раз проверять текущее значение с -2 значением?
27 мар 20, 17:48    [22107087]     Ответить | Цитировать Сообщить модератору
 Re: Найти последнего потомка.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
Earl11
alexeyvg, так вопрос в чём: идёт цепочка допустим 78-394-357-301 и выходит такой момент 271-502-271-271-502-271 и дальше всё вокруг двух значений. И каждый раз проверять текущее значение с -2 значением?
А для исключения зацикливания придётся цепочку хранить во временной табличке (в каждой итерации цикла добавлять туда найденный элемент)

И условием выхода из цикла должно быть не только отсутствие нового элемента, но и присутствия найденного
элемента в этой временной табличке.
27 мар 20, 22:54    [22107184]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить