使用此查询:
OPTIONAL MATCH (n {id: "does-not-exist"})
CALL {
RETURN "test" as inner
}
RETURN inner
我希望子查询不会被执行,并且外部RETURN
不会返回任何结果。相反,子查询只执行一次,返回值为"test"
。我假设它是OPTIONAL
会导致整个查询以一个空行继续。
我的实际查询看起来更像这样:
MATCH (n {id: "exists"})
CALL {
WITH n
OPTIONAL MATCH (n)--(m {id: "mightExist"})
CALL {
WITH m
MATCH (m)--(o {id: "does-not-exist"})
RETURN "test" as inner
}
RETURN inner
}
RETURN inner
这会导致查询不返回任何内容,因为最深的子查询不MATCH
任何内容。最深的子查询仍然被调用一次,因为OPTIONAL MATCH
的行为。我不能将OPTIONAL MATCH
更改为MATCH
,因为当该关系不存在时,整个查询将不会返回任何内容,即使它应该返回。
本质上,我试图返回一个节点的嵌套关系,它可能存在也可能不存在于根节点的关系中。我怎么能这么做呢?
- 注意:我尽量远离APOC,以减少供应商锁定,但如果我绝对必须使用
apoc.when
之类的东西,我可以。
1条答案
按热度按时间ncgqoxb01#
您可以尝试将最后一个
MATCH
设置为可选,然后使用WITH
过滤行。就像这样: