Neo4j 如果第二部分不起作用,则使用的Cypher查询不会返回任何内容

Neo4j 如果第二部分不起作用,则使用的Cypher查询不会返回任何内容,neo4j,cypher,Neo4j,Cypher,我有一个查询,它假设连接两个结果,并将联合作为输出 MATCH (:Some )-[r*0..1]-> (p:Address) WITH collect(p) AS rows1 MATCH (:Some2)-[r*0..1]-> (pp:Address) WITH rows1+collect(pp) AS rows2 UNWIND rows2 AS row RETURN row 如您所见,选择包括两部分。因此,如果两个查询都有匹配的数据,那么它可以正常工作,但是如果匹配的第

我有一个查询,它假设连接两个结果,并将联合作为输出

MATCH (:Some )-[r*0..1]-> (p:Address) WITH collect(p) AS rows1
MATCH (:Some2)-[r*0..1]-> (pp:Address) 
WITH  rows1+collect(pp) AS rows2 
UNWIND rows2 AS row RETURN  row
如您所见,选择包括两部分。因此,如果两个查询都有匹配的数据,那么它可以正常工作,但是如果匹配的第二部分没有返回任何内容,那么它将返回空。意思是
MATCH(:Some2)-[r*0..1]->(pp:Address)
返回空,然后整个联合失败并返回null,即使
MATCH(:Some2)-[r*0..1]->(p:Address)
返回值


如何解决这个问题?这是neo4j中的一个bug吗?

您实际上没有问任何问题(您确实刚刚描述了模式匹配的预期行为,…即如果没有匹配,就没有结果)。。。但我想你想要一个解决方案

MATCH (:Some )-[r*0..1]-> (p:Address)
RETURN p
UNION
MATCH (:Some2 )-[r*0..1]-> (p:Address)
RETURN p
我们应该做到这一点。请注意,唯一重要的是返回的变量完全相同(它们包含的内容实际上并不重要)

还有。。。您可能想看看可选匹配的作用

希望这有帮助

问候,, 汤姆

更新

CALL apoc.cypher.run("
    MATCH (:Some )-[r*0..1]-> (p:Address)
    RETURN p
    UNION
    MATCH (:Some2 )-[r*0..1]-> (p:Address)
    RETURN p",{}) YIELD value
RETURN value.p AS result
ORDER BY result;

这个简单的查询应该可以工作:

MATCH (s)-[*0..1]->(p:Address)
WHERE s:Some OR s:Some2
RETURN p;

感谢您的输入,我使用了以下版本

MATCH (p:Address)
WHERE exist ((:Some )-[r*0..1]-> (p)) OR ((:Some2 )-[r*0..1]-> (p))
RETURN p;

我尝试了一个可选的匹配项。。是虫子吗?正常的工会对我不起作用,因为这对count不起作用。我希望它返回聚合计数,然后将整个语句包装在apoc.cypher.run中,您可以对所有需要的内容进行后处理。。。我更新了我的答案以展示一个例子。