Дайте мне людей, которые владеют всеми данными автомобилями - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужен один запрос Cypher, где мне нужно собрать всех людей, которые владеют всеми указанными автомобилями

Например

Person 1 -> Car 1
Person 1 -> Car 2
Person 1 -> Car 3

Person 2 -> Car 2
Person 2 -> Car 3
Person 2 -> Car 4

Person 3 -> Car 3
Person 3 -> Car 4
Person 3 -> Car 5

If the input is Car 2, Car 3, then the output should be Person 1, Person 2
If the input is Car 3, Car 4, then the output should be Person 2, Person 3
If the input is Car 3, Car 4, Car 5 then the output should be Person 3
If the input is Car 1, Car 3, Car 5 then the output should be Empty

1 Ответ

0 голосов
/ 25 сентября 2019

У нас есть статья базы знаний по выполнению пересечения совпадений , в которой рассматриваются запросы такого типа.

Используя первый подход в статье, нам нужно выполнить сопоставление с шаблоном с учетом входных данных (лиц, которые владеют данными автомобилями), затем подсчитать количество автомобилей из этого набора, которые были сопоставлены на человека, а затем сравнить эток числу автомобилей во входном списке и тому, где эти цифры совпадают, вы нашли свою личность:

WITH ['Car 3', 'Car 4'] as cars
MATCH (p:Person)-[:OWNS]->(c:Car)
WHERE c.name in cars
WITH p, size(cars) as inputCnt, count(DISTINCT c) as cnt
WHERE cnt = inputCnt
RETURN p

У вас должен быть индекс: Автомобиль (имя) для этого, чтобы запрос мог использоватьпоиск по индексу, чтобы найти начало: Авто узлы быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...