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
大家好,我正在尝试编写一个包含 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