我有一个图表显示公司之间的财务关系 - 欠款关系,公司欠公司的钱。我寻求一种独特的关系 - 圈子,后者是封闭的。所以,如果我欠你的钱,我们发现你欠我的钱,我关闭债务。这些公司按税号确定。为此,我使用此Cypher查询:
start n=node(*)
match p=n-[r:OWES*1..200]->n
where HAS(n.taxnumber)
return extract(s in relationships(p) : s.amount),
extract(t in nodes(p) : ID(t)),
length(p) ;
但我也得到像
这样的结果Company1-Company2-company1-Company-3
我在java应用程序中显示了这个结果。在我用java代码解析它们之后,我是否应该隐藏这个结果 - 一个公司被显示两次的结果。 这在逻辑方面很好,但我需要一个公司只展示一次的结果,我不想要多次获得同一公司的结果。如何修改我的Cypher查询?我想要的是结果中的公司只能在结果的开头和结尾处,而不是在中间盘旋。
答案 0 :(得分:2)
您可以尝试检查路径节点不包含起始节点。
start n=node(*)
match p=n-[:OWES*1..200]->(m), (m)-[r:OWES]->n
where HAS(n.taxnumber)
AND NOT(n IN tail(nodes(p)))
return extract(s in relationships(p) : s.amount) + r.amount,
extract(t in nodes(p) : ID(t)) + ID(n),
length(p) + 1;
不幸的是1.8.2中没有下标,只有tail(coll)
没有简单的方法可以从检查中排除最后一个元素。这就是为什么我必须分解p并在最后修复你的聚合。