检查可选匹配中的空值

Checking NULLS in an OPTIONAL MATCH

我有一个这样的密码查询:

MATCH (start:StartLabel)
OPTIONAL MATCH (start)-[:A]->(end1:EndLabel)
OPTIONAL MATCH (start)-[:B|C]->(middle:MiddleLabel)-[:D]->(end2:EndLabel)
WHERE NOT(end1 IS NULL AND end2 IS NULL)
RETURN *

在此图形模型中,有多种从 (start) 到达 (end) 的有效方法,但我想确保结果至少匹配一条可能的 OPTIONAL MATCH 路径。出于某种原因,我继续得到结果,其中 end1end2 都是 NULL 与此 WHERE 子句。我是否遗漏了有关 Cypher 如何一起处理 OPTIONAL MATCHWHERE 的信息?

我听说 WHERES 总是适用于最近的 (OPTIONAL )MATCH,所以也许这会起作用?

MATCH (start:StartLabel)
OPTIONAL MATCH
  (start)-[:A]->(end1:EndLabel),
  (start)-[:B|C]->(middle:MiddleLabel)-[:D]->(end2:EndLabel)
WHERE NOT(end1 IS NULL AND end2 IS NULL)
RETURN *

顺便说一句,我觉得 end1 IS NOT NULL OR end2 IS NOT NULL 对我来说更好读

这是获取结果的另一种方法:

MATCH (start:StartLabel)-[:A]->(end:EndLabel)
RETURN start, NULL as middle, end
UNION
MATCH (start:StartLabel)-[:B|C]->(middle:MiddleLabel)-[:D]->(end:EndLabel)
RETURN start, middle, end