首页 > 解决方案 > 在一个查询中创建多个连接

问题描述

如何将一个节点连接到不同类型的多个节点?要连接的节点作为参数在一个列表中,部分节点在数据库中不存在。如何只连接现有的,而没有重复现有的连接?

OPTIONAL MATCH (ja : Course{name: 'Math'}), (jm : Student {name: 'James'}) , (bl : Student {name: 'Bill'})
MERGE (ja)-[r1:learn {nickname: 'ALL'}]->(jm)
MERGE (ja)-[r2:learn {nickname: 'ALL'}]->(bl)
RETURN ja, jm

在上面的代码中,学生 James 存在而 Bill 不存在,整个操作都失败了,并且没有创建 Course (Math) 与 Student (James) 之间的关系!

标签: neo4jcypher

解决方案


您可以跨列表中的值进行 MATCH ,如果列表中有一些项目没有节点,那很好,只要至少一个有效:

MATCH (ja : Course{name: 'Math'}), (student:Student)
WHERE student.name IN ['James', 'Bill']
MERGE (ja)-[:learn {nickname:'ALL'}]->(student)
RETURN ja, student

推荐阅读