我是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
在上下文中削减了关系。
如果有人知道,我会很感激,请让我知道内部原因!!!
答案 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