Neo4j 匹配子句和Where子句的显著差异

Neo4j 匹配子句和Where子句的显著差异,neo4j,cypher,Neo4j,Cypher,我有两个问题——一个是限制比赛,另一个是限制在哪里。它们都基于northwind数据集 MATCH(n:Employee)-[:sell]->(:Order{shipName:“北/南”})退货(n) 返回3个节点Andrew、Janet和Janet(注意Janet的重复项) 匹配(n:Employee),其中(n)-[:sell]->(:Order{shipName:“北/南”})返回n 返回2个结果Andrew和Janet 最后,我有第三个查询,它的特点是: 匹配(n:Employe

我有两个问题——一个是限制比赛,另一个是限制在哪里。它们都基于northwind数据集

  • MATCH(n:Employee)-[:sell]->(:Order{shipName:“北/南”})退货(n)

    • 返回3个节点Andrew、Janet和Janet(注意Janet的重复项)
  • 匹配(n:Employee),其中(n)-[:sell]->(:Order{shipName:“北/南”})返回n

    • 返回2个结果Andrew和Janet
  • 最后,我有第三个查询,它的特点是:

  • 匹配(n:Employee)-[:sell]>(o:Order{shipName:“北/南”})其中(n)-[:sell]>(:Order{shipName:“北/南”})返回n

    • 这还返回了3个节点,查询顺序有点让人惊讶——匹配应用在where
  • 问题是为什么它们1和2不返回相同的结果?同样,将匹配项移动到WHERE子句是否不会更改结果


    我误解了什么吗?

    我想你的困惑是因为MATCH()是关于模式的,WHERE是关于单个逻辑的是/否。此外,我认为Janet在系统中有两个顺序,而Andrew有一个顺序,当不使用WHERE时,它会影响MATCH()返回的结果

    模型1返回“Employee”和“Order”标记节点的联接,由于Janet有两个订单,她报告了两次,而Andrew报告了一次

    模型2的措辞为“此员工在系统中是否有任何订单?”这是因为WHERE短语为每个员工节点返回一个true/false。这就是为什么你只看到安德鲁和珍妮特一次而不是珍妮特两次


    模型3是模型1和模型2的组合,它返回两组结果的“并集”。

    我想您可能会感到困惑,因为MATCH()是关于模式的,而WHERE是关于单个逻辑是/否的。此外,我认为Janet在系统中有两个顺序,而Andrew有一个顺序影响MATCH()返回的结果当没有使用WHERE时

    模型1返回“Employee”和“Order”标记节点的联接,由于Janet有两个订单,她报告了两次,而Andrew报告了一次

    模型2的措辞为“此员工在系统中是否有任何订单?”这是因为WHERE短语为每个员工节点返回一个true/false。这就是为什么你只看到安德鲁和珍妮特一次而不是珍妮特两次


    模型3是模型1和2的组合,它返回两组结果的“并集”。

    您的模型看起来怎么样?@MicTech您的模型看起来怎么样?@MicTech