#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 =
часть первого запроса ничего не делает.