2

有以下关系

Bob-[:TWINS]-Alice

我需要归还所有双胞胎。以下是正在使用的密码,但返回重复项

MATCH a-[:TWINS]-b 
RETURN a.name, b.name

我已经在 Neo4j 控制台中设置了这个

如何不返回重复项?我知道这可以通过包含关系的方向来轻松解决,但这里的方向不相关。所以想知道如何避免重复。

4

4 回答 4

6

这是经典的方式:

MATCH a-[:TWINS]-b
WHERE id(a) < id(b)
RETURN a, b
于 2013-09-17T07:49:54.833 回答
3

试试这个,首先得到名称对,然后使用“DISTINCT”删除重复项。

MATCH a-[:TWINS]-b 
RETURN DISTINCT CASE WHEN a.name < b.name  THEN a.name + ',' + b.name  ELSE b.name + ',' + a.name END AS result
于 2013-09-17T02:32:01.830 回答
0

找到了一种方法,但它只适用于最新版本。我正在寻找适用于早期版本或更简单的其他想法。

想法是使用关系消除重复项DISTINCT,然后使用startnodeendnode函数检索每个已识别关系的节点

MATCH p=a-[r:TWINS]-b 
WITH DISTINCT r AS rel 
WITH startnode(rel) AS n1, endnode(rel) AS n2 
RETURN n1.name, n2.name
于 2013-09-16T19:35:48.400 回答
0

关系是有方向的,您正在使用忽略方向的查询表单。由于您似乎已经对数据进行了结构化,以便双胞胎之间存在单一关系,因此您可以通过将查询限制在单一方向来让它返回双胞胎之间的单一关系:注意>查询中的附加字符,然后需要关系在比赛的那个方向上。

MATCH a-[:TWINS]->b 
RETURN a.name, b.name
于 2013-09-16T22:00:43.443 回答