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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (67)

我进行了一个查询,打算连接两个结果并将union作为输出。

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 (:Some )-[r*0..1]-> (p:Address)有返回值。

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

提问于
用户回答回答于

这个简单的查询应该可以运行:

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

你问的其实不是一个问题(你确实刚刚描述了模式匹配的预期行为......即如果没有匹配就没有结果)......但我想你是要一个解决方案?

MATCH (:Some )-[r*0..1]-> (p:Address)
RETURN p
UNION
MATCH (:Some2 )-[r*0..1]-> (p:Address)
RETURN p

请注意,唯一重要的是返回的变量完全相同(它们包含的内容实际上并不重要)。

另外......你可能想看一下OPTIONAL MATCH的作用......

希望这可以帮助。

更新

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;

所属标签

可能回答问题的人

  • 学生

    3 粉丝476 提问7 回答
  • uncle_light

    5 粉丝518 提问7 回答
  • 最爱开车啦

    8 粉丝503 提问5 回答
  • 骑牛看晨曦

    4 粉丝522 提问5 回答

扫码关注云+社区

领取腾讯云代金券