在可选配对中检查NULLS

时间:2015-04-24 21:51:20

标签: neo4j cypher

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

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路径匹配。出于某种原因,我继续得到end1end2 NULL WHERE条款的结果。我是否遗漏了Cypher如何一起处理OPTIONAL MATCHWHERE的事情?

2 个答案:

答案 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对我来说更好看