Как ответить

периментирую с CTE в SQL Server, но зашел в тупик, заставив работать следующий сценарий. У меня есть иерархическая таблица, подобная этой:

Node(ID:439)
  Node(ID:123)
    Node(ID:900)        
  Node(ID:56)
    Node(ID:900)

Ожидаемые результаты:

NodeID ParentNodeID
439    0
123    439
900    123
56     439
900    56

Таким образом, в основном у нас есть таблица иерархии родитель-потомок, с одним тонким отличием. Каждый ребенок потенциально может иметь более одного родителя. Я исследовал много статей в блогах и постах StackOverflow о создании CTE, которые возвращают записи родитель-потомок, но они не возвращают всех родителей для детей, только первый, который он находит.

Вот пример CTE, который я пробовал:

WITH Hierarchy(NodeID, ParentNodeID)
AS
(
    SELECT 
        T1.NodeID,
          T1.ParentNodeID
    FROM
        ParentChildTable T1
    WHERE
        T1.NodeID = 439

    UNION ALL
    SELECT 
        T1.NodeID,
        T1.ParentNodeID
    FROM
        Heirarchy T1
        INNER JOIN Heirarchy TH ON TH.NodeID = T1.ParentNodeID
)

(Примечание. Имена таблиц и столбцов в вышеприведенном CTE были изменены с оригинального в целях конфиденциальности.)

Вышеупомянутый CTE работает нормально, он находит все записи родитель-потомок, начиная с ID: 439, но он находит только одного родителя для ID элемента: 900, даже если у него есть два родителя.

Может кто-нибудь сообщить мне, если это возможно с помощью CTE, или есть другой способ SQL сделать это?

Приветствия. Иак.

Ответы на вопрос(2)

Ваш ответ на вопрос