命名关系会改变结果?

Naming relationships changes the results?

考虑两个查询:

[1]
MATCH (p1:Person)-[ACTED_IN]->(m1:Movie), (p2:Person)-[DIRECTED]->(m1)
WHERE p1 = p2
RETURN p1.name

[2]
MATCH (p1:Person)-[xa:ACTED_IN]->(m1:Movie), (p2:Person)-[xd:DIRECTED]->(m1)
WHERE p1 = p2
RETURN p1.name

唯一的区别是 xa:xd:,关系别名。

结果差异更大:

为什么?没有聚合。关系别名未使用。为什么它会更改查询?

数据库是 https://app.graphenedb.com/ 上的免费示例 db 'Movie graph'(但它是私有的)。

您混淆了区分变量和关系类型的语法。在你的第一场比赛中,因为没有 : 字符,ACTED_INDIRECTED 变量 ,匹配任何关系类型,并丢掉你的匹配的结果。

:ACTED_IN:DIRECTED 是您想要使用的,因为前缀 : 将它们表示为关系类型。

它对节点标签和变量的工作方式相同,以:为前缀的令牌表示节点标签,冒号前的令牌用作变量(或者如果没有:存在,没有标签,整个东西都是一个变量)。

编辑

这里有几个关系语法的例子,指出相关部分:

在这个中,ACTED_IN是p1和m1之间所有关系的变量。

(p1:Person)-[ACTED_IN]->(m1:Movie)

在这个中,:ACTED_IN是p1和m1的关系类型,没有变量存在

(p1:Person)-[:ACTED_IN]->(m1:Movie)

其中:ACTED_IN为p1和m1的关系类型,'a'为匹配关系绑定的变量

(p1:Person)-[a:ACTED_IN]->(m1:Movie)

这是无效的语法,因为 : 之后必须有一个标记作为关系类型。

(p1:Person)-[a:]->(m1:Movie)