2016-08-30 227 views
0

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

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 
+0

的'ORDERED_BY'和'CUSTOMER'关系看起来他们可能是多余的。它们总是存在于同一个“销售”和“客户”节点之间吗? – cybersam

回答

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)