我认为最好在有差异时提供一个示例来进行解释。
假设我们有官方 Neo4j 教程提供的“Movie”数据库。
:Person 和 :Movie 节点之间总共有 10 个 :WROTE 关系
MATCH (:Person)-[r:WROTE]->(:Movie) RETURN count(r); // returns 10
1) 让我们尝试下一个带有两个 MATCH 子句的查询:
MATCH (p:Person)-[:WROTE]->(m:Movie) MATCH (p2:Person)-[:WROTE]->(m2:Movie)
RETURN p.name, m.title, p2.name, m2.title;
您肯定会在结果中看到 10*10 = 100 条记录。
2) 让我们尝试使用一个 MATCH 子句和两种模式的查询:
MATCH (p:Person)-[:WROTE]->(m:Movie), (p2:Person)-[:WROTE]->(m2:Movie)
RETURN p.name, m.title, p2.name, m2.title;
现在您将看到返回 90 条记录。
这是因为在这种情况下,p = p2 和 m = m2 具有相同关系(:WROTE)的记录被排除。
比如第一种情况下有一条记录(两个MATCH子句)
p.name m.title p2.name m2.title
“亚伦·索尔金”“几个好男人”“亚伦·索尔金”“几个好男人”
虽然在第二种情况下没有这样的记录(一个 MATCH,两个模式)