2015-06-25 42 views
0

在CASE中使用子查询是否正确?NEO4J - 在CASE中使用子查询

MATCH (p:Person) 
SET p.total = 
CASE 
WHEN HAS (p.total) 
THEN p.total 
ELSE 
MATCH (p)-[:CHILD]->(c) 
RETURN sum(c.age) 
END 
RETURN DISTINCT p 

当我尝试这样做时出现以下错误。

输入无效 ']':预期的标识符字符,空格NodeLabel,属性地图或关系图案 “MATCH(P) - [:CHILD] - >(C)”

回答

1

你可以这样做,但会有在未来更好的方法:

MATCH (p:Person) 
SET p.total = 
CASE WHEN HAS (p.total) 
THEN p.total 
ELSE reduce(sum = 0, path in (p)-[:CHILD]->() | sum + (nodes(path)[1]).age) 
END 
RETURN DISTINCT p 

或实际:

MATCH (p:Person) 
SET p.total = 
COALSECE(p.total, 
    reduce(sum = 0, path in (p)-[:CHILD]->() | sum + (nodes(path)[1]).age) 
) 
RETURN DISTINCT p