【发布时间】: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)
【问题讨论】: