Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск листьев в дереве .. / 5 сообщений из 5, страница 1 из 1
26.02.2020, 15:36
    #39931116
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск листьев в дереве ..
Здравствуйте.
Есть сервер:
Код: sql
1.
2.
select @@VERSION
Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)   Mar 18 2018 09:11:49   Copyright (c) Microsoft Corporation  Developer Edition (64-bit)



Есть таблица LINKS содержащая два столбца SourceID и TargetID (ИД Родительской задачи и её дочки соответственно)

SourceID TargetID11 2112 2716 3221 3527 4529 4645 77

нужно вывести все "листья", т.е. из данного примера это ИД: 32 , 35 , 46 , 77
Иерархия может быть глубже (специально не стал делать для лучшей наглядности)

Может быть есть какой то уже известный алгоритм перебора? Или придется изобретать велосипед?
...
Рейтинг: 0 / 0
26.02.2020, 15:41
    #39931123
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск листьев в дереве ..
MAULER,

Все листья от какой-то заданной корневой ноды (списка нод), или вообще все листья в таблице?
...
Рейтинг: 0 / 0
26.02.2020, 15:44
    #39931124
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск листьев в дереве ..
MAULER
Здравствуйте.
Есть сервер:
Код: sql
1.
2.
select @@VERSION
Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)   Mar 18 2018 09:11:49   Copyright (c) Microsoft Corporation  Developer Edition (64-bit)




Есть таблица LINKS содержащая два столбца SourceID и TargetID (ИД Родительской задачи и её дочки соответственно)

SourceID TargetID11 2112 2716 3221 3527 4529 4645 77


нужно вывести все "листья", т.е. из данного примера это ИД: 32 , 35 , 46 , 77
Иерархия может быть глубже (специально не стал делать для лучшей наглядности)

Может быть есть какой то уже известный алгоритм перебора? Или придется изобретать велосипед?

лист - это тот, у которого нет дочерних объектов.

Код: sql
1.
2.
3.
4.
select 
from 
where not exists 
  
...
Рейтинг: 0 / 0
26.02.2020, 15:51
    #39931130
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск листьев в дереве ..
MAULER,

проще некуда - листья:

Код: sql
1.
2.
3.
SELECT l1.* FROM LINKS l1 
LEFT JOIN LINKS l2 ON l1.TargetId = l2.SourceId 
WHERE l2.SourceId IS NULL 
...
Рейтинг: 0 / 0
27.02.2020, 08:19
    #39931401
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск листьев в дереве ..
a_voronin
MAULER,

проще некуда - листья:

Код: sql
1.
2.
3.
SELECT l1.* FROM LINKS l1 
LEFT JOIN LINKS l2 ON l1.TargetId = l2.SourceId 
WHERE l2.SourceId IS NULL 



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


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