Sql 在给定节点下获取节点?
给定一个源节点,我想得到它下面的所有节点,其中under意味着其级别小于给定节点的级别并且可以从给定节点访问的所有节点。我记得这可以通过使用公共表表达式来完成,我目前正在进行这项工作。但是,有没有一种方法可以在由大约100K个节点组成的大型图上快速执行此操作 样本数据: 图表: 例如: 给定B,我想得到:E,D 给定A,我想得到:B,C,E,D,F,G 给定C,我想得到:D,F,GSql 在给定节点下获取节点?,sql,sql-server-2008,graph,Sql,Sql Server 2008,Graph,给定一个源节点,我想得到它下面的所有节点,其中under意味着其级别小于给定节点的级别并且可以从给定节点访问的所有节点。我记得这可以通过使用公共表表达式来完成,我目前正在进行这项工作。但是,有没有一种方法可以在由大约100K个节点组成的大型图上快速执行此操作 样本数据: 图表: 例如: 给定B,我想得到:E,D 给定A,我想得到:B,C,E,D,F,G 给定C,我想得到:D,F,G 这里有一个可能的解决方案,使用,但仍然有一些问题,答案并不完全匹配,但它已经到达了那里。一旦接近最终需求,我将更新
这里有一个可能的解决方案,使用,但仍然有一些问题,答案并不完全匹配,但它已经到达了那里。一旦接近最终需求,我将更新此查询 编辑1:除了请求根节点“A”的输出之外,以下输出满足了所有输出,在这种情况下,由于某种原因,它只深入一级 编辑2:这将给出预期的输出。我现在将检查其他用例
;WITH HIERARCHY AS (
SELECT T.Source, T.SourceLevel, T.Sink, T.SinkLevel
FROM #TEMP T
WHERE T.Source = 'A'
AND T.SourceLevel < T.SinkLevel
UNION ALL
SELECT X.Source, X.SourceLevel, X.Sink, X.SinkLevel
FROM #TEMP X
JOIN HIERARCHY H ON H.Sink = X.Source
)
SELECT DISTINCT H.Sink
FROM HIERARCHY H
[检查此项。][1]这可能会回答您的问题[1]:@helloSuresh:谢谢!我已经开始通过递归CTE来实现这一点,并提供了一个可能的解决方案。
A Level - 1
/ \
B---C Level - 2
/ \ /|\
E D F G Level - 3
;WITH HIERARCHY AS (
SELECT T.Source, T.SourceLevel, T.Sink, T.SinkLevel
FROM #TEMP T
WHERE T.Source = 'A'
AND T.SourceLevel < T.SinkLevel
UNION ALL
SELECT X.Source, X.SourceLevel, X.Sink, X.SinkLevel
FROM #TEMP X
JOIN HIERARCHY H ON H.Sink = X.Source
)
SELECT DISTINCT H.Sink
FROM HIERARCHY H