neo4j - Neo4j 在 where 条件下的细微差别
问题描述
我写了 2 个类似的查询,旨在查找“任何与汤姆汉克斯演过的电影合演的演员,但不是汤姆汉克斯电影的合演演员的演员”。
我以为我可以用movie1.title <> movie2.title
成为条件,但结果不同
查询 1(Neo4j.com 上提供的答案):
MATCH
(p:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(p2:Person {name:"Tom Hanks"}),
(candidate:Person)-[:ACTED_IN]->(m2:Movie)<-[:ACTED_IN]-(p:Person)
where NOT (p2)-[:ACTED_IN]->()<-[:ACTED_IN]-(candidate)
return candidate,m2.title,count(*) as strong order by strong DESC
我的查询:
MATCH
(p:Person)-[:ACTED_IN]->(m)<-[:ACTED_IN]-(p2:Person {name:"Tom Hanks"}),
(candidate:Person)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(p:Person)
where m.title<>m2.title and p2<>candidate
return candidate.name ,count(*) as strong order by strong DESC
任何人都可以非常简要地解释为什么我的查询结果包含更多参与者?
解决方案
假设candidate
和汤姆汉克斯共同出演了除m
和之外的其他电影m2
。测试将m.title<>m2.title
通过,并将candidate
返回。
您必须确保根本没有他们共同出演的电影。这就是第一个查询测试的内容。
顺便说一句:m.title<>m2.title
应该m<>m2
改为测试,因为不同的电影可以有相同的标题。