如何处理cypher错误:Neo.Client Error.Statement.SyntaxError

时间:2018-04-20 09:45:32

标签: neo4j cypher

我是Cypher的新手,我遇到了一个真正困扰我的问题。 如果我像这样编码

MATCH (r:Researcher)
OPTIONAL MATCH (r)-[:SUPERVISES]->(s:Student)
WITH r, count(s) AS studentsSupervised
MATCH (r)-[:AUTHORS]->(p1:Publication)
OPTIONAL MATCH (p1)<-[:CITES*]-(p2:Publication)
RETURN r.name, studentsSupervised, count(DISTINCT p2) AS citedCount` 

它将返回正确的答案。但如果我喜欢那个

MATCH (r:Researcher)
MATCH (r)-[:AUTHORS]->(p1:Publication)
OPTIONAL MATCH (r)-[:SUPERVISES]->(s:Student)
OPTIONAL MATCH (p1)<-[:CITES*]-(p2:Publication)
WITH r, count(s) AS studentsSupervised
RETURN r.name, studentsSupervised, count(DISTINCT p2) AS citedCount

我有一个Error Neo.ClientError.Statement.SyntaxError,提到Variable p2 not defined (line6, column 51) in "RETURN r.name, students Supervised, count(DISTINCT p2) AS citedCount"

我很困惑,似乎WITH在上下文中削减了关系。 如果有人知道,我会很感激,请让我知道内部原因!!!

1 个答案:

答案 0 :(得分:2)

使用WITH时,必须传递要在进一步查询中使用的所有变量。有关详细信息,请参阅documentation

另外请注意,使用join传递的所有变量都会创建WITH。因此在这里要小心,否则输出可能不是你想要的。

请参阅我刚刚在p2

之后添加WITH的地方的密码
MATCH (r:Researcher)
MATCH (r)-[:AUTHORS]->(p1:Publication)
OPTIONAL MATCH (r)-[:SUPERVISES]->(s:Student)
OPTIONAL MATCH (p1)<-[:CITES*]-(p2:Publication)
WITH r, count(s) AS studentsSupervised, p2
RETURN r.name, studentsSupervised, count(DISTINCT p2) AS citedCount
相关问题