Neo4j - NOT IN查询

14
我拥有的图架构是(演员)-[:参演]->(电影)
我知道如何查找与某个演员合作过的演员,如下所示: MATCH (演员 {name:"Tom Hanks"} )-[:参演]->(电影)<-[:参演]-(其他演员) return distinct 其他演员; 我知道如何查找所有出演过某部电影的演员: MATCH (全部演员)-[:参演]->(电影) return distinct 全部演员; 然而,我不知道如何查找所有未在合作演员中的演员,我该怎么做呢?

你想找到整个数据集中所有没有和汤姆·汉克斯一起出演过电影的演员吗? - Kenny Bastani
1个回答

23

因为你希望从全局演员列表中排除合作者,所以这不是最好的图形查询方法,以下是一些建议。

// Max de Marzi
MATCH (actor:Actor {name:"Tom Hanks"})-[:ACTED_IN]->(movie), (other:Actor)
WHERE NOT (movie)<-[:ACTED_IN]-(other)
RETURN other

// Wes Freeman
MATCH (actor:Actor {name:"Tom Hanks"}), (other:Actor)
WHERE NOT (actor)-[:ACTED_IN]->()<-[:ACTED_IN]-(other)
RETURN other


// Michael Hunger
MATCH (actor:Actor {name:"Tom Hanks"} )-[:ACTED_IN]->(movies)<-[:ACTED_IN]-(coactor)
WITH collect(distinct coactor) as coactors
MATCH (actor:Actor)
WHERE NOT actor IN coactors
RETURN actor

NOT IN 对我没有起作用。然而使用 <> 给了我想要的结果。 - Jack
10
我认为 WHERE NOT actor IN coactors 是正确的。我错了吗?你的版本不起作用,Michael。 - Gondil
4
“WHERE NOT thing IN list” 对我也起作用了。谢谢 @Gondil - Merrick
1
@michael-hunger WHERE NOT thing IN list 的功能是正确的,但语法很糟糕。为什么Cypher不支持WHERE thing NOT IN list呢? - Benjamin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接