ソースノードが与えられた場合、その「下」にあるすべてのノードを取得したいと思います。ここで、underとは、レベルが指定されたノードのレベルよりも低く、指定されたノードから到達可能なすべてのノードを意味します。これは一般的なテーブル式を使用して実行できることを覚えており、現在取り組んでいます。ただし、大きなグラフ(約100Kノードで構成される)でこれを高速に実行する方法はありますか?
サンプルデータ:
CREATE TABLE #TEMP(Source VARCHAR(50), SourceLevel INT, Sink VARCHAR(50), SinkLevel INT);
INSERT INTO #TEMP VALUES('A', 1, 'B', 2);
INSERT INTO #TEMP VALUES('A', 1, 'C', 2);
INSERT INTO #TEMP VALUES('B', 2, 'C', 2);
INSERT INTO #TEMP VALUES('B', 2, 'D', 3);
INSERT INTO #TEMP VALUES('B', 2, 'E', 3);
INSERT INTO #TEMP VALUES('C', 2, 'D', 3);
INSERT INTO #TEMP VALUES('C', 2, 'F', 3);
INSERT INTO #TEMP VALUES('C', 2, 'G', 3);
SELECT *
FROM #TEMP
GO
DROP TABLE #TEMP
GO
グラフ:
A Level - 1
/ \
B---C Level - 2
/ \ /|\
E D F G Level - 3
例:
- 与えられたB、私は取得したい:E、D
- Aが与えられた場合、取得したい:B、C、E、D、F、G
- Cが与えられた場合、取得したい:D、F、G