使用Union结果使用With过滤匹配

时间:2014-11-28 22:03:20

标签: neo4j cypher

我希望使用UNION(n)的结果作为后续匹配的过滤器。

MATCH (n:Thing)-<<Insert valid match filters here>> 
RETURN n
UNION
MATCH (n:Thing)-<<Insert a different set of match filters here>>
RETURN n;

n提供:

MATCH (n)-[:RELTYPE1]->(a:Artifact);
RETURN a;

我希望使用WITH语句,但我很难弄清楚语句的结构。

MATCH (n:Thing)-<<Insert valid match filters here>> 
RETURN n
UNION
MATCH (n:Thing)-<<Insert a different set of match filters here>>
WITH n
MATCH (n)-[:RELTYPE1]->(a:Artifact);
RETURN a;

这是我最初的尝试,但是WITH被解释为UNION第二场比赛的子查询的开始(这是有意义的)。

我可以看到一些不太优雅的方法来完成这项工作,但正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

我一直在看你的工会例子,这对我来说很有意义,但我看不出我怎么能让它发挥作用。但我肯定不是那些得到所有答案的人。有没有理由你不能做这样的事情......

MATCH (n:Thing) where n.name = 'A'
with collect(n) as n1
MATCH (n:Thing) where n.name = 'B'
with collect(n) as n2, n1
with n1 + n2 as both
unwind both as n
MATCH (n)-[:RELTYPE1]->(a:Artifact);
RETURN a;