当“OPTIONAL MATCH”不返回任何行时,如何防止子查询执行

问题描述 投票:0回答:1

使用此查询:

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 的东西,我可以。


    

neo4j cypher
1个回答
0
投票
apoc.when

设为可选,然后使用

MATCH
来过滤行。 像这样:
WITH

© www.soinside.com 2019 - 2024. All rights reserved.