【问题标题】:Neo4j how to get (DISTINCT) all nodes and relationships with at least one node in common?Neo4j如何获得(DISTINCT)所有节点和至少一个节点共同的关系?
【发布时间】:2021-03-12 09:48:10
【问题描述】:

我最近一直在尝试使用 neo4j 和 cypher,但我并没有完全正确地得到以下查询。我想退回与给定员工共享至少一个项目的所有员工以及他们从事的项目。如果用一个例子来描述可能会更简单:

上图中输入为员工 1 的期望结果是:

Employee Project
0 A
1 A
1 B
4 A

我尝试了以下查询,但它返回重复的关系:

MATCH (a0:Employee {name:1})-[:WORKS]->(b0:Project) 
MATCH (b0)<-[:WORKS]-(a:Employee) 
MATCH (a)-[:WORKS]->(b:Project) 
RETURN a.name AS employee, b.name AS project 
ORDER BY employee, project
Employee Project
0 A
1 A
1 A
1 B
1 B
4 A

提前感谢您的帮助。

注意:这些查询可用于创建上面的图表

CREATE (:Employee {name: 0}), 
       (:Employee {name: 1}), 
       (:Employee {name: 2}),  
       (:Employee {name: 3}), 
       (:Employee {name: 4}), 
       (:Project {name: 'A'}), 
       (:Project {name: 'B'}), 
       (:Project {name: 'C'})
MATCH (e:Employee), (p:Project) WHERE e.name=0 AND p.name='A' CREATE (e)-[:WORKS]->(p)
MATCH (e:Employee), (p:Project) WHERE e.name=1 AND p.name='A' CREATE (e)-[:WORKS]->(p)
MATCH (e:Employee), (p:Project) WHERE e.name=1 AND p.name='B' CREATE (e)-[:WORKS]->(p)
MATCH (e:Employee), (p:Project) WHERE e.name=4 AND p.name='A' CREATE (e)-[:WORKS]->(p)
MATCH (e:Employee), (p:Project) WHERE e.name=3 AND p.name='C' CREATE (e)-[:WORKS]->(p)

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    经过几个小时的努力,我找到了解决方案。我不确定它是否有效。在某种程度上,答案已经在问题中了——DISTINCT。这个查询完成了这项工作:

    MATCH (a0:Employee {name:0})-[:WORKS]->(b0:Project) 
    MATCH (b0)<-[:WORKS]-(a:Employee)
    WITH DISTINCT(a)
    MATCH (a)-[:WORKS]->(b:Project) 
    RETURN a.name AS employee, b.name AS project 
    ORDER BY employee, project
    

    【讨论】:

      【解决方案2】:

      您似乎想要这个问题的答案:给定某个员工从事的项目,找出所有从事这些项目的员工。

      您可以通过一个简单的查询来回答这个问题:

      MATCH (:Employee {name:1})-[:WORKS]->(b:Project) 
      MATCH (a:Employee)-[:WORKS]->(b)
      RETURN a.name AS employee, b.name AS project 
      ORDER BY employee, project
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-17
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多