Neo4j 如何获取(DISTINCT)所有节点和至少有一个节点的关系?

Neo4j how to get (DISTINCT) all nodes and relationships with at least one node in common?

我最近一直在尝试使用 neo4j 和 cypher,但我不太能正确地获得以下查询。我想 return 与给定员工共享至少一个项目的所有员工以及他们从事的项目。举个例子可能更简单:

对于输入为员工 1 的上图,期望的结果是:

Employee Project
0 A
1 A
1 B
4 A

我尝试了以下查询,但它 return 存在重复关系:

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)

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

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

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

你可以用一个简单的查询来回答这个问题:

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