Я ищу способ извлечения данных из древовидной таблицы, как определено ниже.
Дерево таблиц Определено как: -
Уникальный идентификатор TreeID
TreeParent уникальный идентификатор
TreeCode varchar (50)
TreeDesc varchar (100)
Данные некоторые (23 тыс. Строк), родительские ссылки обратно в ID в таблице
Следующий SQL рендеринг всего дерева (занимает около 2 минут 30)
Мне нужно сделать следующее.
1) Визуализируйте каждый узел дерева с его родителем LVL 1
2) Визуализируйте все узлы, которые имеют описание, которое соответствует TreeDesc, например «SomeText%»
3) Рендеринг всех родительских узлов, которые для одного идентификатора дерева.
Пункты 2 и 3 занимают 2 минуты 30, так что это должно быть намного быстрее!
Пункт 1, просто не могу понять, как это сделать, убив SQL или взяв навсегда
любые предложения будут полезны
Спасибо
Julian
WITH TreeCTE(TreeCode, TreeDesc, depth, TreeParent, TreeID)
AS
(
-- anchor member
SELECT cast('' as varchar(50)) as TreeCode ,
cast('Trees' as varchar(100)) as TreeDesc,
cast('0' as Integer) as depth,
cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier) as TreeParent,
cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier) as TreeID
UNION ALL
-- recursive member
SELECT s.TreeCode,
s.TreeDesc,
cte.depth+1,
isnull(s.TreeParent, cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)),
isnull(s.TreeID, cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier))
FROM pdTrees AS S
JOIN TreeCTE AS cte
ON isnull(s.TreeParent, cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)) = isnull( cte.TreeID , cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier))
)
-- outer query
SELECT
s.TreeID, s.TreeCode, s.TreeDesc, s.depth, s.TreeParent
FROM TreeCTE s