Получение всех потомков корневого узла

Я понимаю, что это старая тема, но я не понимаю эту проблему.

Класс - это просто абстракция понятия, которое связывает функциональность его методов вместе более дружелюбным человеком способом. Например, класс WaveGenerator может включать в себя методы Sine, Sawtooth и SquareWave. Все три метода явно связаны с генератором классов. Однако все трое также не имеют гражданства. Если они разработаны правильно, им не нужно сохранять информацию о состоянии вне метода. Это делает их объектами без гражданства, которые, если я правильно понимаю, делают их неизменяемыми функциями, которые являются основной концепцией в функциональной парадигме.

С концептуальной точки зрения я не вижу никакой разницы между

пусть Envelope Sine = ...

и

позволяет Envelope Generator.Sine = ...

, кроме того, что последний может обеспечить большее понимание цели функции.

0
задан Zohar Peled 19 March 2019 в 08:45
поделиться

1 ответ

Один из способов сделать это - использовать рекурсивный cte, который также будет сохранять корневой узел каждой рекурсии, а затем запрашивать этот cte на основе корня нужного узла.

Сначала создайте и заполните образец таблицы: ( Пожалуйста, сохраните нам этот шаг в ваших будущих вопросах)

DECLARE @T AS TABLE
(
    NodeId int,
    Parent int
);

INSERT INTO @T (NodeId, Parent) VALUES
(1 , 0),
    (3 , 1),
        (7 , 3),
        (8 , 3),
    (4 , 1),
        (9 , 4),
        (10, 4),

(2 , 0),
    (5 , 2),
        (11, 5),
        (12, 5),
    (6 , 2),
        (13, 6);

Рекурсивный cte:

WITH CTE AS
(
    SELECT NodeId, Parent, NodeId As Root
    FROM @T
    WHERE Parent = 0
    UNION ALL
    SELECT t.NodeId, t.Parent, Root
    FROM @T As t
    JOIN CTE 
        ON t.Parent = CTE.NodeId
)

Запрос:

SELECT NodeId, Parent
FROM CTE
WHERE Root = (SELECT Root FROM CTE WHERE NodeId = 4)

Результаты:

NodeId Parent
1       0
3       1
4       1
9       4
10      4
7       3
8       3

Вы можете увидеть живое демо на rextester.

0
ответ дан Zohar Peled 19 March 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: