有以下关系
Bob-[:TWINS]-Alice
我需要归还所有双胞胎。以下是正在使用的密码,但返回重复项
MATCH a-[:TWINS]-b
RETURN a.name, b.name
如何不返回重复项?我知道这可以通过包含关系的方向来轻松解决,但这里的方向不相关。所以想知道如何避免重复。
有以下关系
Bob-[:TWINS]-Alice
我需要归还所有双胞胎。以下是正在使用的密码,但返回重复项
MATCH a-[:TWINS]-b
RETURN a.name, b.name
如何不返回重复项?我知道这可以通过包含关系的方向来轻松解决,但这里的方向不相关。所以想知道如何避免重复。
这是经典的方式:
MATCH a-[:TWINS]-b
WHERE id(a) < id(b)
RETURN a, b
试试这个,首先得到名称对,然后使用“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
找到了一种方法,但它只适用于最新版本。我正在寻找适用于早期版本或更简单的其他想法。
想法是使用关系消除重复项DISTINCT
,然后使用startnode
和endnode
函数检索每个已识别关系的节点
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
关系是有方向的,您正在使用忽略方向的查询表单。由于您似乎已经对数据进行了结构化,以便双胞胎之间存在单一关系,因此您可以通过将查询限制在单一方向来让它返回双胞胎之间的单一关系:注意>
查询中的附加字符,然后需要关系在比赛的那个方向上。
MATCH a-[:TWINS]->b
RETURN a.name, b.name