我试图在此查询中不会在单独的列
中两次返回相同的节点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,我不希望结果中的最后一条记录。
我该如何做到这一点?
由于
答案 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
这个想法基本上是尝试找到从开始节点到交叉/向上销售项目的直接匹配,如果找到路径则不包括它。