Как ответить
периментирую с 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 сделать это?
Приветствия. Иак.