给定一个源节点,我想获取它“下”的所有节点,其中 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