首页 > 解决方案 > SQL Server Graph Tables - 浏览某些节点以找到结束

问题描述

我有一个包含 2 个节点表和 1 个边缘表的图表结构。

Symptom表是 Node 表,Syndrome_Causes是 Edge 表。此外,还有另一个名为Syndrome的节点表。

我的目标是有一个查询,我可以遍历我的图,通过特定的节点。

我编写了以下查询以向您显示所有可能的路线,从“心血管”节点开始,但我需要过滤掉通过路径的结果,在下图中用红色下划线(心血管->心悸->持续时间->间隔->天)。

select distinct
    s1.symptom_name
    , string_agg(s2.symptom_name, '->') within group (graph path) AS links
    , last_value(s2.symptom_name) within group (graph path) as last_match
from symptom as s1,
    syndrome_causes for path as sc1,
    symptom         for path as s2
where match(
    shortest_path(s1(-(sc1)->s2)+)
    )
    and s1.symptom_name = 'Cardiovascular'

在此处输入图像描述

我曾考虑在WHERE子句中添加另一个过滤条件,但我不知道如何编写它,以便我限制节点仅通过“链接”列中的值。

请注意,我知道,我可以将链接列中的值传递给它以过滤行并让我获得列中的“天”值last_match,但我的目的是通过遵循特定路径通过节点来过滤它(验证) ,如下所示:

where match(
    shortest_path(s1(-(sc1)->s2)+)
    )
    and s1.symptom_name = 'Cardiovascular'
    and s2.symptom_name = ALL('Palpitations, 'Duration', 'Interval', 'Days')

但是,这给出了一个错误:

别名或标识符“s2.symptom_name”不能用于选择列表、排序依据、分组依据或具有上下文。

那么,有没有办法限制路径搜索通过某些节点?

标签: sql-serversql-server-2019sql-graphsql-server-graphgraph-table

解决方案


那么,有没有办法限制路径搜索通过某些节点?

可以通过仅选择“路径”的特定值来过滤/限制要考虑用于路径的节点,但这并不决定如何遍历路径。

......
from symptom as s1,
syndrome_causes for path as sc1,
(select * from symptom where symptom_name in ('Palpitations', 'Duration', 'Interval', 'Days')) for path as s2
......

推荐阅读