如何在 Cypher 中使用一条语句创建所有边?
例如:假设我有一个这样的对象
Employees {name: "abc, country: "NZ", zipcode: "123456"}
Employees {name: "def", country: "AUS", zipcode: "964573"}
假设我有以下 Manager 对象
Manager { name: "abc", depatment: "product"}
Manager {name: "abc", depatment: "sales"}
Manager {name: "abc", depatment: "marketing"}
最后是地址对象
Address {zipcode: "964573", street: "Auckland St"}
现在我想创建所有边缘,Employees.name = Manager.name and Employees.zipcode = Address.zipcode
但是如果Employees.name != Manager.name
但是Employees.zipcode = Address.zipcode
我希望在之间创建所有边缘,Employees
并且Address
类似地如果Employees.zipcode != Address.zipcode
但是Employees.name = Manager.name
我希望在Employees
和之间创建所有边缘Manager
。我想在一个语句/查询中实现所有这些
简单地说,如果员工、经理和地址之间存在匹配的顶点,我希望在它们之间创建所有边,但如果任何两个之间只有匹配,我希望在这两个顶点之间也创建边。我想在一个查询/语句中完成所有这些?
这是否可以在一条语句中编写一个可以满足上述所有条件的查询?
到目前为止我尝试的是这个
首先使用 MATCH 子句查找对,然后在它们之间创建关系。
MATCH (e:Employees),(m:Manager), (a:Address)
WHERE e.name=m.name or e.zipcode = a.zipcode
WITH e,m,a
CREATE (m)-[:REL_NAME]->(e), (e)-[:ADDR_REL]->(a)
Where
由于该子句,这显然不起作用,因为不会检查 if e.name=m.name
then e.zipcode = a.zipcode
,因此不会在员工和地址之间创建边缘。