【发布时间】:2020-04-07 14:00:57
【问题描述】:
我今天在理解密码中的 OPTIONAL MATCH 子句时遇到了问题。让我们考虑这个简单的案例:
CREATE (:a {type:"group"})-[:a_rel]->(:a {type: "app"})-[:b_rel]->(:b);
这将创建 2 个具有不同类型属性的“a”节点,以及一个“b”节点。他们都在一个简单的路径a-->a-->b
然后,我尝试匹配具有“组”类型的“a”节点,连接到另一个“a”节点,可选连接到“b”节点。
因此,如果我运行以下查询,我希望它不会返回任何内容:
MATCH(x:a)-->(y:a)
where x.type = "group"
OPTIONAL MATCH (y)-->(z:b)
where z IS NULL
return y
但它总是返回路径的第二个“a”节点,在 where 子句中使用 IS NULL 或 IS NOT NULL。
你能解释一下我在这里不明白的地方吗?在我的真实模型中,第二个“a”节点可以连接或不连接到“b”节点。我想检索所有未连接到任何“b”节点的节点。
非常感谢您的帮助
雷米
【问题讨论】: