我有一个加权图,某些节点具有相同权重的双向关系。我只想以表格形式显示这些节点。
MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1)
RETURN n1.prefered_name ,r1.weight,r2.weight, n2.prefered_name;
这段代码为我提供了我所需要的,但加倍了。
如果我在两个具有相同权重的节点(指向不同方向)之间有2个关系,我只想向我展示一次特定行。 这可以实现吗?还是因为是双向关系,所以必须告诉我两次?
答案 0 :(得分:2)
由于两种模式都匹配,因此您只需要添加一个WHERE
子句以限制输出以仅在一个方向上返回匹配。
MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1)
WHERE id(n1) > id(n2)
RETURN n1.prefered_name ,r1.weight,r2.weight, n2.prefered_name;
答案 1 :(得分:2)
此查询与@DaveBennett的查询类似,但仅在两个关系的权重相同时才过滤出一行:
MATCH (n1)-[r1:HAS_DESCENDANT]->(n2)-[r2:HAS_DESCENDANT]->(n1)
WHERE r1.weight <> r2.weight OR ID(n1) > ID(n2)
RETURN n1.prefered_name, r1.weight, r2.weight, n2.prefered_name;
顺便说一句,n1
和n2
成为彼此的“后裔”是不直观的。如果有意这样做,则可能需要将关系类型的名称更改为不太混乱的名称。