以下に定義するように、ツリーテーブルからデータを抽出する方法を探しています。
テーブルツリーの定義:
-TreeID uniqueidentifier
TreeParent uniqueidentifier
TreeCode varchar(50)
TreeDesc varchar(100)
一部のデータ(23k行)、親参照をテーブルのIDに戻す
次のSQLは、ツリー全体をレンダリングします(約2分30分かかります)
私は次のことをする必要があります。
1)各ツリーノードをそのLVL 1親で
レンダリングします。2)「SomeText%」のようなTreeDescと一致する説明を持つすべてのノードをレンダリングします
。3)単一のツリーID用のすべての親ノードをレンダリングします。
アイテム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