查询的以下两个变体产生不同的结果(第一个给出了我想要的结果)。我不知道为什么。它们看起来和我一样。有人可以帮忙吗?
MATCH (gene:Person)-[:ACTED_IN]->(mov),
(actr:Person)-[:ACTED_IN]->(mov), (robin:Person{name:"Robin Williams"})
WHERE NOT (robin)-[:ACTED_IN]->(mov)
AND gene.name = "Gene Hackman"
RETURN gene, mov, actr;
MATCH (gene:Person)-[:ACTED_IN]->(mov),
(actr:Person)-[:ACTED_IN]->(mov), (robin:Person)
WHERE gene.name = "Gene Hackman"
AND NOT (robin{name:"Robin Williams"})-[:ACTED_IN]->(mov)
RETURN gene, mov, actr;
答案 0 :(得分:0)
此:
WHERE NOT (robin)-[:ACTED_IN]->(mov)
AND gene.name = "Gene Hackman"
意思是“罗宾没有在电影中扮演角色,而基因的名字不是'真正的哈克曼'”
此:
WHERE gene.name = "Gene Hackman"
AND NOT (robin{name:"Robin Williams"})-[:ACTED_IN]->(mov)
意思是“Gene的名字是'Gene Hackman',而Robin Williams没有在电影中扮演角色。”
看看发生了什么? Gene Hackman文件管理器正在成为WHERE NOT
函数的一部分。您需要使用第二个示例或者像这样重写第一个示例:
MATCH (gene:Person { name: 'Gene Hackman' })-[:ACTED_IN]->(mov),
(actr:Person)-[:ACTED_IN]->(mov), (robin:Person{name:"Robin Williams"})
WHERE NOT (robin)-[:ACTED_IN]->(mov)
RETURN gene, mov, actr;
我尽可能地在查询中保持WHERE
语法一致。如果我使用节点内语法过滤节点或rel,我会尝试以相同的方式执行其他操作。它使事情可预测和可读。