2015-06-25 61 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