Примечание. Это расширение @raj Answer, в котором больше внимания уделяется объяснению проблемы.
Этот запрос неверен и может возвращать нежелательные результаты.
Для понимания возьмем в качестве набора данных следующий пример:
Owner Vehicle
P1 V1
P2 V2
P3 V3
Так как вы делаете
MATCH (n:Owner) MATCH (v:Vehicles)
В результате получается декартово произведение для двух совпадений, подобных первым двум столбцам
Owner Vehicle NOT (n)-[:OWNS]->(v) (n)-[:OWNS]->(v)
P1 V1 - P1
P2 V1 P2 -
P3 V1 P3 -
P1 V2 P1 -
P2 V2 - P2
P3 V2 P3 -
P1 V3 P1 -
P2 V3 P2 -
P3 V3 - P3
Теперь при фильтрации с NOT (n)-[:OWNS]->(v)
дает (P1, P2, P3, P1, P2, P3)
Теперь выполняется фильтрация с помощью (n)-[:OWNS]->(v) gives
(P1, P2, P3)
Теперь при возврате отличных с NOT (n)-[:OWNS]->(v)
т (P1, P2, P3)
Теперь при возврате отличных с (n)-[:OWNS]->(v)
т (P1, P2, P3)
Ясно, что эти двое заканчивают тем же, верно ??
Но учтите, что это будет верно только в том случае, если у всех владельцев есть хотя бы транспортное средство, и ни один владелец не владеет всем транспортным средством.
Это то, что вы можете сделать, чтобы найти владельцев без транспортных средств.
MATCH (a:Owner)
WHERE SIZE((a)-[:OWNS]->(:Vehicles)) = 0
RETURN a