以下密码查询在最后一行失败,因为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