Cypher查询报错PatternExpressions are not allowed to introduce new variables原因咨询
报错根因
- Cypher 不允许在
WHERE子句的模式表达式中定义新变量。你语句中的变量m没有提前在MATCH等前置子句中声明,首次出现就直接用在WHERE的模式匹配里,触发了语法规则校验报错。
修正方案
根据你的实际需求可以选择对应写法:
- 需求为:筛选和某个节点存在
type1关系、且和同一个关联节点不存在type2关系的n节点
写法如下,先在MATCH中提前声明两个节点变量,再做条件过滤:
MATCH (n)-[:type1]-(m) WHERE NOT (n)-[:type2]-(m) RETURN DISTINCT n
这里加DISTINCT是为了避免同一个n和多个符合条件的m匹配时返回重复结果。
- 需求为:筛选存在至少一条
type1关系、且全局没有任何type2关系的n节点
写法如下,用EXISTS校验关系是否存在即可,不需要定义额外关联节点变量:
MATCH (n) WHERE EXISTS((n)-[:type1]-()) AND NOT EXISTS((n)-[:type2]-()) RETURN n
如果你的业务场景中关系是有方向要求的,自行在模式中补充箭头(比如-[:type1]->表示出边,<-[:type1]-表示入边)即可。
内容的提问来源于stack exchange,提问作者Ooker
相关产品推荐
相关产品推荐

