考虑两个问题:
import lib.helper
唯一的区别是lib.helper.something()
和[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
,关系别名。
结果的差异要大得多:
为什么呢?没有聚合。关系别名未使用。为什么要更改查询?
数据库是https://app.graphenedb.com/上的免费示例db'电影图'(但它是私有的)。
答案 0 :(得分:2)
您混淆了将变量与关系类型区分开来的语法。在第一场比赛中,由于没有:
个字符,ACTED_IN
和DIRECTED
是变量,与任何关系类型匹配,并丢弃匹配的结果。
: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)