首页 > 解决方案 > 即使在 null 检查之后为什么我在 neo4j 中得到 null 值?

问题描述

我尝试了以下查询,其中我试图获取有联系的人,如果该联系人导演了一部电影,那么电影名称。在此,我试图避免电影名称为 null。

但下面的查询不起作用,我什至尝试过 IS NOT NULL。和 m.title <> NULL

MATCH (a:Person)-[:HAS_CONTACT]->(b)
OPTIONAL MATCH (b)-[:DIRECTED]->(m:Movie)
WHERE m <> NULL
RETURN a.name, b.name,m.title
LIMIT 1

结果:

    a.name  b.name  m.title
"Keanu Reeves"  "Rita Wilson"   null

标签: neo4jcypher

解决方案


由于 anOPTIONAL MATCH 不必匹配(例如,如果 ab没有DIRECTED关系),您的查询RETURN子句可以合法地看到 NULL m(以及 NULL m.title)。

如果您只想查看一个(可能为空的)值列表m.title(如果该电影没有,则其中任何一个都可能为 NULL title):

MATCH (a:Person)-[:HAS_CONTACT]->(b)
RETURN a.name, b.name, [(b)-[:DIRECTED]->(m:Movie) | m.titles] AS titles
LIMIT 1

推荐阅读