Начинающий программировать на MSSQL, меня попросили реализовать полную древовидную структуру, которая, очевидно, уже существует в Oracle.Не уверен, что делать.
Реализован простой пример набора данных, но нет уверенности в том, что еще нужно узлу для прохождения и вставки.
Create table HeirachTree(
NodeID int not null primary key,
NodeName nvarchar(100) not null,
NodeParentID int,
NodeNext int,
)
NodeStructure ([Node_ID], [Node_Name], [Node_Parent_ID], [Node_Next], Node_Depth)
AS
(
SELECT [NodeID], [NodeName], [NodeParentID], [NodeNext], 0
FROM [dbo].[HeirachTree]
WHERE [NodeParentID] IS NULL --Select all root nodes.
UNION ALL
SELECT t.[NodeID], t.[NodeName], t.[NodeParentID], t.[NodeNext],
s.Node_Depth + 1
FROM [dbo].[HeirachTree] t
INNER JOIN NodeStructure s
ON t.[NodeParentID] = s.[Node_ID]
)
SELECT
Node_Name,
Node_Depth,
(SELECT [NodeNext] FROM [dbo].[HeirachTree]
WHERE [NodeNext] = NodeStructure.[Node_ID]+1) AS NextNode,
(SELECT [NodeName] FROM [dbo].[HeirachTree]
WHERE [NodeID] = NodeStructure.[Node_Parent_ID]) AS ParentNode
FROM NodeStructure
ORDER BY Node_Depth, Node_Parent_ID
Итак, нашел пример и рассчитал глубину, используя cte;для более простого запроса об использовании его в качестве ограничения.
Принял BFS и подумал, что мне тоже нужна ссылка на следующего ребенка.Так я могу сопоставить NextID с идентификатором, используя какой-то ключ или соединения или ...?Это даже необходимо?
Как я могу вставить определенный узел где-то в середине моего дерева?Что-то вроде использования Select более
CASE NextID WHEN NULL, затем NodeDepth + = 1 ELSE NodeDepth
Или ход мыслей в совершенно неверном направлении?