Я ищу способ извлечения данных из таблицы дерева, как определено ниже.
Дерево таблицы определяется как:-
TreeID uniqueidentifier
TreeParent uniqueidentifier
TreeCode varchar(50)
TreeDesc varchar(100)
Некоторые данные (23 тыс. строк), родительские ссылки обратно в идентификатор в таблице
Следующий SQL отображает все дерево (занимает около 2 минут 30)
Мне нужно сделать следующее.
1) Визуализация каждого узла дерева с его родительским элементом уровня 1
2) Визуализация всех узлов, описание которых соответствует TreeDesc, например SomeText%
3) Визуализация всех родительских узлов, относящихся к одному идентификатору дерева.
Пункты 2 и 3 занимают 2 минуты 30 минут, так что это должно быть намного быстрее!
Пункт 1, просто не могу решить, как это сделать, не убивая SQL или не тратя время
любые предложения будут полезны
Спасибо
Джулиан
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