Я экспериментирую с 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?
Ваше здоровье. Jas.