如何在Cypher的不同列中返回相同的节点

时间:2013-02-13 21:20:45

标签: neo4j cypher

我试图在此查询中不会在单独的列

中两次返回相同的节点
START n=node:nodes(customer = 'c2')
MATCH n-[:OWNS]->owned-[:CROSS_SELL|UP_SELL]->sell
RETURN distinct n.customer,owned.product,sell.product

客户C2拥有产品P1和P2。产品P2和P3可以从产品P1交叉销售。产品P3也可以从产品P2销售。

查询正确返回

C2 P1 P3
C2 P2 P3
C2 P1 P2

由于客户已经拥有P2,我不希望结果中的最后一条记录。

我该如何做到这一点?

由于

2 个答案:

答案 0 :(得分:4)

只需添加一个条件来过滤C2和P2之间的关系

START n=node:nodes(customer = 'c2')
MATCH n-[:OWNS]->owned-[:CROSS_SELL|UP_SELL]->sell
WHERE not(n-[:OWNS]-sell)
RETURN distinct n.customer,owned.product,sell.product

答案 1 :(得分:0)

我没有经过测试验证这是否有效,但似乎在逻辑上是正确的:

START n=node:nodes(customer = 'c2')
MATCH n-[:OWNS]->owned-[:CROSS_SELL|UP_SELL]->sell,
      alreadyOwns = n-[:OWNS]->sell
WHERE COUNT(alreadyOwns) = 0
RETURN distinct n.customer,owned.product,sell.product

这个想法基本上是尝试找到从开始节点到交叉/向上销售项目的直接匹配,如果找到路径则不包括它。