如何在Neo4j Cypher中返回不同的节点对?

如何在Neo4j Cypher中返回不同的节点对?,neo4j,cypher,Neo4j,Cypher,我有节点类型:个人和邻居。当试图找到住在同一个街区的人时,我让这些人以不同的顺序出现了两次 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

我有节点类型:个人和邻居。当试图找到住在同一个街区的人时,我让这些人以不同的顺序出现了两次

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,但它在列表排序时不起作用。

该模式匹配两种方式,以便消除一半响应,您可以添加一个
WHERE
子句,该子句指定一个
Person
节点的
id()
大于另一个节点

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