Разница между шифровальными запросами. (neo4j movie db)

#neo4j #cypher #graph-databases

#neo4j #шифровальный #графические базы данных

Вопрос:

Я выполняю упражнения, найденные в :play intro-neo4j-exercises (упражнение 4.10). Все кажется хорошим, но я не могу точно понять разницу между двумя запросами. Может кто-нибудь, пожалуйста, уточнить?

 MATCH path =  (p:Person)-[:PRODUCED]->(m:Movie) 
WHERE NOT EXISTS( (p)-[:DIRECTED]->(:Movie) )
RETURN p.name, m.title
  

ВОЗВРАТ:

 |"a.name"      │"m.title"               │
╞══════════════╪════════════════════════╡
│"Joel Silver" │"The Matrix"            │
├──────────────┼────────────────────────┤
│"Joel Silver" │"The Matrix Reloaded"   │
├──────────────┼────────────────────────┤
│"Joel Silver" │"The Matrix Revolutions"│
├──────────────┼────────────────────────┤
│"Stefan Arndt"│"Cloud Atlas"           │
├──────────────┼────────────────────────┤
│"Joel Silver" │"V for Vendetta"        │
├──────────────┼────────────────────────┤
│"Joel Silver" │"Speed Racer"           │
├──────────────┼────────────────────────┤
│"Joel Silver" │"Ninja Assassin"        │
└──────────────┴────────────────────────┘
  

В то ВРЕМЯ как:

 MATCH (p:Person)-[:PRODUCED]->(m:Movie)
WHERE NOT EXISTS( (p)-[:DIRECTED]->(m) )
RETURN p.name, m.title
  

ВОЗВРАТ:

 ╒═════════════════╤════════════════════════╕
│"a.name"         │"m.title"               │
╞═════════════════╪════════════════════════╡
│"Joel Silver"    │"The Matrix"            │
├─────────────────┼────────────────────────┤
│"Joel Silver"    │"The Matrix Reloaded"   │
├─────────────────┼────────────────────────┤
│"Joel Silver"    │"The Matrix Revolutions"│
├─────────────────┼────────────────────────┤
│"Nora Ephron"    │"When Harry Met Sally"  │
├─────────────────┼────────────────────────┤
│"Stefan Arndt"   │"Cloud Atlas"           │
├─────────────────┼────────────────────────┤
│"Lana Wachowski" │"V for Vendetta"        │
├─────────────────┼────────────────────────┤
│"Lilly Wachowski"│"V for Vendetta"        │
├─────────────────┼────────────────────────┤
│"Joel Silver"    │"V for Vendetta"        │
├─────────────────┼────────────────────────┤
│"Joel Silver"    │"Speed Racer"           │
├─────────────────┼────────────────────────┤
│"Lana Wachowski" │"Ninja Assassin"        │
├─────────────────┼────────────────────────┤
│"Joel Silver"    │"Ninja Assassin"        │
├─────────────────┼────────────────────────┤
│"Lilly Wachowski"│"Ninja Assassin"        │
└─────────────────┴────────────────────────┘
  

Ответ №1:

Первый запрос находит Person s, который PRODUCED Movie m , но не направил ни одного фильма. Второй запрос находит Person s, который PRODUCED Movie m , но не указывал этого конкретного Movie m . Вы знаете это, потому что во втором запросе m в предложении используется связанная переменная WHERE , тогда как в первом запросе :Movie в предложении используется только метка WHERE .

Кстати, path = часть первого запроса ничего не делает.