一个查询中包含多个匹配查询

时间:2018-09-26 08:15:08

标签: neo4j cypher

我的neo4j数据库中有以下记录

(:A)-[:B]->(:C)-[:D]->(:E)

(:C)-[:D]->(:E)

我想获取所有C节点以及所有关系和相关节点。如果我进行查询

Match (p:A)-[o:B]->(i:C)-[u:D]->(y:E) 
Return p,o,i,u,y

如果我愿意,我会第一个匹配

Match (i:C)-[u:D]->(y:E) 
Return i,u,y

我得到第二个。

但是我希望它们都在一个查询中。我该怎么办?

2 个答案:

答案 0 :(得分:0)

最简单的方法是对查询进行UNION,并用null填充未使用的变量(因为UNION的所有密码必须具有相同的返回列

Match (p:A)-[o:B]->(i:C)-[u:D]->(y:E) 
Return p,o,i,u,y
UNION
Match (i:C)-[u:D]->(y:E) 
Return NULL as p, NULL as o,i,u,y

在您的示例中,第二个匹配实际上也与第一个匹配的最后一半匹配,所以也许您实际上想要更直接的东西,例如...

MATCH (c:C)
OPTIONAL MATCH (connected)
WHERE (c)-[*..20]-(connected)
RETURN c, COLLECT(connected) as connected

答案 1 :(得分:0)

您的查询似乎太具体了。如果只需要对所有:C节点,连接的节点和关系进行操作,则应该可以:

MATCH (c:C)-[r]-(n)
RETURN c, r, n