Я тренируюсь в базе данных фильмов Neo4j, которая поставляется вместе с ней при установке Neo4j. По какой-то причине, эти два запроса возвращают разные результаты:Почему эти запросы в Neo4j возвращают разные результаты?
match (keanu:Person {name: "Keanu Reeves"})-[:ACTED_IN]->()
<-[:ACTED_IN]-(actor), (actor)-[:ACTED_IN]->()<-[:ACTED_IN]-(other)
where NOT ((keanu)-[:ACTED_IN]->()<-[:ACTED_IN]-(other)) and
other <>keanu return other.name, count(other) as count order by count DESC;
match (keanu:Person {name: "Keanu Reeves"})-[:ACTED_IN]->(movie)
<-[:ACTED_IN]-(actor), (actor)-[:ACTED_IN]->()<-[:ACTED_IN]-(other)
where NOT ((keanu)-[:ACTED_IN]->(movie)<-[:ACTED_IN]-(other)) and
other <>keanu return other.name, count(other) as count order by count DESC;
Единственное отличие состоит в том, что я указал «фильм» переменную. Я просто хочу посмотреть актеров, которые не играли с Киану, но чаще всего играли с его коллегами. Результаты те же, за исключением случаев, когда я указываю переменную 'movie', в верхнюю часть результатов добавляется новый актер (чаще всего играющий с созвездиями Киану). Этот актер вообще не появляется в первых результатах запроса, но только во втором и вершинах результатов.
Но в первой строке матча переменная «movie» будет содержать все фильмы, которые когда-либо играл Киану, не так ли? Поэтому, когда я использую его в where-clause, не должно быть никакого другого фильма, в котором играл Киану, кроме тех, которые содержатся в переменной «movie»? Итак, почему это не имеет значения, кроме добавления одного актера? – giorgimode