Cypher查询疑问:CREATE与MATCH的变量命名是否存在关联?
Cypher变量关联问题解答
核心结论
CREATE语句和MATCH语句中的变量完全没有关联,变量名称只是临时占位符,不影响数据库存储和查询匹配。
具体解释
CREATE里的变量是语句级临时变量
你写的CREATE (u:User {name: "Alice"})-[:Likes]->(m:Software {name: "Memgraph"});中,u和m只是这条CREATE语句执行时的临时变量——用来指代正在创建的节点,语句执行完后,这些变量就失效了,不会被存储到数据库里。数据库实际存储的是:- 一个带有
User标签、name: "Alice"属性的节点 - 一个带有
Software标签、name: "Memgraph"属性的节点 - 一条类型为
:Likes、连接上述两个节点的关系
- 一个带有
MATCH里的变量是查询时的临时占位符
MATCH (u:User)-[r]->(x) RETURN u, r, x;中的u、r、x是查询过程中用来指代匹配到的元素的临时名字:(u:User)表示匹配所有带有User标签的节点,并用u指代它们[r]表示匹配连接这些User节点的任意关系,并用r指代这条关系(x)表示匹配关系指向的任意节点,并用x指代它
这里的变量名r、x和CREATE里的m或者未命名的关系完全没关系,只要节点/关系的结构(标签、类型)符合条件,就会被匹配到。
匹配的依据是存储的元数据,不是变量名
Cypher查询匹配的是数据库里实际存储的节点标签、属性,关系类型这些信息,和创建时用的变量名毫无关系。哪怕你CREATE时用foo指代User节点,MATCH时用bar指代,只要标签是User,就能匹配到。
内容的提问来源于stack exchange,提问作者user20833054
相关产品推荐
相关产品推荐

