neo4j 密码“IN”运算符

5n0oy7gb  于 2023-05-06  发布在  其他
关注(0)|答案(2)|浏览(154)

第二个查询给出了customerkey的列表。只要我只想将客户与列表中的键相匹配,我就希望在第一查询中使用该结果。在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
qpgpyjmq

qpgpyjmq1#

有一个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)
raogr8fs

raogr8fs2#

是的,Cypher有一个IN选项。它以列表形式使用(带括号)。

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

这个列表可以用以前查询的结果来构造(即通过提供结果列表而不是手动提供)

// matches movies which have been released in the birthyear of any person(actor) in the db 
match (q:Person)
with [q.name, q.born] as list_born
match (m:Movie) where  m.released > 1995 and m.released in list_born return m, list_born

相关问题