使用此查询:
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
,因为当该关系不存在时,整个查询将不会返回任何内容,即使它应该存在。本质上,我试图返回一个节点的嵌套关系,该节点可能存在也可能不存在作为与根节点的关系。我怎样才能做到这一点?注意:我试图尽可能远离 APOC 以减少供应商锁定,但如果我绝对必须使用类似
MATCH
的东西,我可以。
apoc.when
设为可选,然后使用
MATCH
来过滤行。
像这样:WITH