Cypher" IN"操作者

时间:2016-08-30 16:37:55

标签: neo4j cypher

第二个查询提供了一个customerkeys列表。我希望在第一个查询中使用该结果,只要我只想将客户与该列表中的键匹配即可。在SQL中有一个IN运算符。在Cypher怎么样?

MATCH (s:Sale)-[:ORDERED_BY]->(c:Customer)
WHERE c.customerKey IN ******
RETURN c.name, SUM(s.orderQuantity)


MATCH (s:Sale)-[:CUSTOMER]->(c:Customer)
WITH SUM(s.orderQuantity) as qtt, c
WHERE qtt>1
RETURN c.customerKey

1 个答案:

答案 0 :(得分:1)

有一个IN运算符可以在列表上运行,并且有一个COLLECT()命令可以将行更改为列表。

那就是说,我认为你根本不需要这样做。您应该能够组合这两个查询,并使用第二个查询产生的客户来提供第一个查询,如下所示:

MATCH (s:Sale)-[:CUSTOMER]->(c:Customer)
WITH SUM(s.orderQuantity) as qtt, c
WHERE qtt>1
// now pass the filtered list of customers to the first query
// no need to do any additional filtering or even deal with customerKey
WITH c
MATCH (s:Sale)-[:ORDERED_BY]->(c)
RETURN c.name, SUM(s.orderQuantity)