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

vatpfxk5  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(142)

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

**P.S.:**我知道最简单的解决方案是从一开始就不使用作用域,我的问题是我所寻找的功能是否存在。

mzaanser

mzaanser1#

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可用于内部查询。

luaexgnf

luaexgnf2#

我会这样做:

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

qij5mzcb3#

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

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

相关问题