【问题标题】:Neo4J - cypher query match differencesNeo4J - 密码查询匹配差异
【发布时间】:2018-02-18 23:03:49
【问题描述】:

大家好,我正在尝试编写一个包含 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)) “(论文:论文)

任何帮助将不胜感激!

【问题讨论】:

    标签: database neo4j cypher graph-databases


    【解决方案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
    

    【讨论】:

    • 作品非常感谢!我认为你可以使用 , 与 MATCH 是一样的吗?
    • 不完全。但是,您可以使用逗号分隔单个 MATCH 子句中的模式,这可能是您之前看到的。虽然可以在 WITH 中使用模式,但不能在同一 WITH 子句中将其与 WHERE 结合使用。
    • 是的,回头看看,这就是我所看到的,感谢您的澄清
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多