with 子句做什么? Neo4j

What with clause do? Neo4j

我不明白 WITH 子句在 Neo4j 中的作用。我读了 The Neo4j Manual v2.2.2 但对 WITH 子句不是很清楚。例子不多。例如,我有下图,其中蓝色节点是足球队,黄色节点是他们的体育场。

我想找到两支或多支球队比赛的体育场。我找到了那个查询并且它有效。

match (n:Team) -[r1:PLAYS]->(a:Stadium)
with a, count(*) as foaf
where foaf > 1
return a

count(*) 告诉我们匹配行的数量。但我不明白 WITH 子句的作用。

WITH 允许您将数据从查询的一部分传递到下一部分。您在 WITH 中列出的任何内容都将在下一个查询部分中可用。

您可以使用聚合、SKIP、LIMIT、ORDER BY 和 WITH,就像在 RETURN 中一样。 唯一的区别是您的表达式必须获得一个带有 AS alias 的别名才能在以后的查询部分中访问它们。

这意味着您可以链接查询部分,其中一个查询部分计算一些数据,下一个查询部分可以使用该计算出的数据。在您的情况下,GROUP BY and HAVING 会在 SQL 中出现,但 WITH 比那更强大。

这是另一个例子

match (n:Team) -[r1:PLAYS]->(a:Stadium)
with distinct a 
order by a.name limit 10
match (a)-[:IN_CITY]->(c:City)
return c.name