我有一个像这样的密码查询:
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 *
在此图表模型中,有多种有效方法可以从(end)
到达(start)
,但我想确保结果与至少一个可能的OPTIONAL MATCH
路径匹配。出于某种原因,我继续得到end1
和end2
NULL
WHERE
条款的结果。我是否遗漏了Cypher如何一起处理OPTIONAL MATCH
和WHERE
的事情?
答案 0 :(得分:2)
以下是获得结果的另一种方法:
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
答案 1 :(得分:0)
我被告知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
对我来说更好看