2017-10-19 154 views
1

我试图创建以下的Cypher查询:Neo4j的Cypher和嵌套的WHERE条件

MATCH (p:Permission) 
WHERE NOT ((p)<-[:HAS|:CONTAINS*1..2]-(u:User) WHERE u.id = {userId}) AND p.minUserReputation <= {minUserReputation} 
RETURN p 

我需要在所有当前未分配的权限(NOT ((p)<-[:HAS|:CONTAINS*1..2]-(u:User))的返回到用户(与u.id = {userId})和通过分信誉值滤波(p.minUserReputation <= {minUserReputation}

目前,此查询失败,出现以下的Cypher错误:

Error executing Cypher; Code: Neo.ClientError.Statement.SyntaxError; Description: Variable `u` not defined 

请帮助解决此查询。谢谢!

回答

1

由于WHERE <pattern>WHERE EXISTS(<pattern>)不允许额外的WHERE上的图案条款,最好先匹配的用户,让您使用您的WHERE子句,则包括该用户在您的谓词变量:

MATCH (u:User) 
WHERE u.id = {userId} 
MATCH (p:Permission) 
WHERE p.minUserReputation <= {minUserReputation} 
AND NOT (p)<-[:HAS|:CONTAINS*1..2]-(u) 
RETURN p