Neo4J - 密码查询匹配差异

Neo4J - cypher query match differences

大家好,我正在尝试编写一个包含 2 个列表的密码查询,然后我将对它们进行区分。

一天结束时,我实际上需要 运行 一个 MATCH 查询来获取两个列表,但我不知道如何构建它才能工作。

所以我需要 运行 生成列表的两个查询是:

MATCH (Paper:Paper)<-[:WROTE]-(a:Author)
WHERE Paper.year > 2010 and Paper.year <2012
RETURN a

第二个是同一个查询,只是从 2010 年到 2011 年和 2012 年到 2013 年的变化。

MATCH (Paper:Paper)<-[:WROTE]-(a:Author)
WHERE Paper.year > 2010 and Paper.year <2012
WITH a AS l1, 

(Paper:Paper)<-[:WROTE]-(a:Author)
WHERE Paper.year > 2011 and Paper.year <2013
WITH a AS l2

RETURN [Author in l2 WHERE not(Author in l1)] 

出于某种原因,我遇到了一些错误(不足为奇) WITH 中的表达式必须使用别名(使用 AS)(第 5 行,第 1 列(偏移量:102)) “(论文:论文)<-[:WROTE]-(a:作者)”

如有任何帮助,我们将不胜感激!

错误的原因是您在第一个 WITH 子句的末尾多了一个逗号。

也就是说,收集结果比保留查询之间的所有结果行更明智,因为您当前的查询无法将结果作为列表使用。

我们可以进行的其他一些改进包括使用链式不等式:

MATCH (Paper:Paper)<-[:WROTE]-(a:Author)
WHERE 2010 < Paper.year < 2012
WITH collect(a) AS l1

MATCH (Paper:Paper)<-[:WROTE]-(a:Author)
WHERE 2011 < Paper.year < 2013
WITH l1, collect(a) AS l2

RETURN [Author in l2 WHERE not Author in l1] as authors