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 (:Some2)-[r*0..1]-> (pp:Address)
返回空然后整个联合失败并返回 null 即使 MATCH (:Some )-[r*0..1]-> (p:Address)
返回值。
如何解决这个问题?它是neo4j中的一个错误吗?
解决方案
您实际上并没有问过一个问题(您确实只是描述了模式匹配的预期行为......即如果没有匹配就没有结果)......但我假设你想要一个解决方案?
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;
推荐阅读
- javascript - 带有进度条的目录
- django - 如何访问 inlineformset_factory 中的字段值/属性?
- python - 如何通过 BS4 获取特定 div 中的文本,避免嵌套 div 中的文本
- java - 如何通过正则表达式提取关键字前后的句子数
- java - 将多个部分左右对齐
- javascript - TypeScript:要求两个数组的长度相同?
- graphql - 如何在 GraphQL 中针对当前用户创建突变?
- html - CGI bin bash脚本不起作用
- javascript - 检查发送的消息是否包含数组中的单词
- reactjs - 当数据来自消费者时,如何导航到动态生成的 url?