多跳查询时,即使最后一条边不存在,如何返回路径中顶点的指定信息呢?

示例语句如下:
match (v1:player) -[:follow]->(v2:player)-[:serve]->(t:team) where v1.name == “tom” return v1.name, v2.name, t.name;

当 v2 不存在 serve 这条边时,整个语句不返回任何数据。
请教一下,如何在 v2 的 serve 边不存在时,也要返回 v1.name、v2.name 呢?

首先,“v2 不存在 serve 这条边时整个语句不返回任何数据” 是符合预期的,cypher 语句的输出结果必须完全满足 pattern,你可以将 pattern 理解为谓词。
v2 的 serve 边不存在的时候返回 v1,v2:

MATCH (v1:player)-[:follow]->(v2:player)
where v1.name=="tom" and not (v2)-[:serve]->(t:team)
RETURN v1.name, v2.name

无论 v2 的 serve 边是否存在都返回 v1,v2:

MATCH (v1:player)-[:follow]->(v2:player)
where v1.name=="tom" 
RETURN v1.name, v2.name

非常感谢您的解答!
还请问一下,有没有办法用一条语句实现这个效果:当 v2 的 serve 边不存在时返回 v1 和 v2,边存在时返回 v1、v2 和 t 呢?
我目前想到的是用 find path 或者 get subgraph,但是这样会把顶点的所有属性都返回,而我只想要顶点的 name 属性,望回复~

MATCH (v1:player)-[:follow]->(v2:player)
where v1.name=="tom" 
optional MATCH (v2)-[:serve]->(t:team) 
RETURN v1.name, v2.name, t.name
1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。