Neo4J - cypher查询匹配差异

时间:2018-02-18 23:03:49

标签: database neo4j cypher graph-databases

大家好我正在尝试编写一个包含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)) “(纸:纸)&LT; - [:WROTE] - (一:作者)”

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

错误的原因是您在第一个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