Cypher/Neo4j–在全局范围内存储带括号的变量



以下密码查询在最后一行失败,因为p2只在EXISTS之后的范围内定义,但有没有办法以某种方式将其带出该范围(例如将其设置为全局变量(并返回?

MATCH (p:Person)
WHERE EXISTS {
MATCH (p{name: 'José'})<-[:CHILD_OF]-(p2:Person)
WHERE p2.name IN ['Roberto', 'Gustavo']  
}
RETURN (p), (p2) // fails

附言:我知道最简单的解决方案是首先不使用作用域,我的问题是我要寻找的功能是否存在。

EXISTS中使用的存在式查询不能返回值。如果要对子查询的结果进行后期处理,则需要使用CALL。看起来你想试试:

MATCH (p:Person)
CALL {
WITH p
MATCH (p{name: 'José'})<-[:CHILD_OF]-(p2:Person)
WHERE p2.name IN ['Roberto', 'Gustavo'] 
RETURN p2 
}
RETURN p, p2

CALL中的WITH使外部查询中的p可用于内部查询。

我会这么做的:

MATCH (p:Person)<-[:CHILD_OF]-(p2:Person)
WHERE p.name = 'Josè'
AND p2.name IN ['Roberto', 'Gustavo']
RETURN p,p2

您可以删除where exists子句,并直接对Jose及其父母进行查询。

MATCH (p: Person{name: 'José'})<-[:CHILD_OF]-(p2:Person)
WHERE p2.name IN ['Roberto', 'Gustavo']  
RETURN p, p2

最新更新