Как вернуть отличную пару узлов в Neo4j Cypher? - PullRequest
1 голос
/ 23 марта 2020

У меня есть Тип узла: Человек и Соседство. Когда я пытаюсь найти людей, живущих в одном и том же районе, люди появляются дважды, в другом порядке.

MATCH (p1:Person)-[n1:LIVES]-(n:Neighborhood)-[n2:LIVES]-(p2:Person)  
RETURN n.name, p1.name, p2.name

возвращает:

"Riverdale", "Paul", "James"
"Riverdale", "Paul", "Mary"
"Riverdale", "James", "Paul"
"Riverdale", "Mary", "Paul"
"Newton", "Zoe", "Harry"
"Newton", "Harry", "Zoe"
...

Как я могу дедуплицировать набор результатов чтобы пара появилась только один раз?

"Riverdale", "Paul", "James"
"Riverdale", "Paul", "Mary"
"Newton", "Zoe", "Harry"
...

Я пробовал DISTINCT, но он не работал, так как список упорядочен.

1 Ответ

1 голос
/ 23 марта 2020

Шаблон соответствует обоим способам, поэтому для исключения половины ответов вы можете добавить предложение WHERE, в котором указано, что id() одного из Person узлов больше, чем другого.

MATCH (p1:Person)-[n1:LIVES]-(n:Neighborhood)-[n2:LIVES]-(p2:Person)  
WHERE id(p1) > id(p2)
RETURN n.name, p1.name, p2.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...