2016-09-24 3 views
0

Ich versuche eine knifflige Abfrage zu machen. Ich muss überprüfen, ob eine Beziehung besteht;neo4j MERGE, SET, CASE

  • wenn es tut Ich brauche eine Eigenschaft festlegen (prop) auf diese Beziehung zu max (0, Prop + val)
  • wenn es mich nicht erstellen muß es die Eigenschaft auf max (0, Wert)

Die Eigenschaft kann negativ sein.

Hier ist im Wesentlichen, was ich werde, obwohl dieses Format wird nicht funktionieren, weil Sie nicht ein WITH-Anweisung nach einer MERGE haben:

MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2) WITH CASE 
WHEN r.prop + {val} < 0 THEN 0 
ELSE r.prop + {val} END as prop 
ON CREATE SET r.prop = prop 
ON MATCH SET r.prop = prop 

Dies ist, wie es es zwei Teile aussehen würde, obwohl ich mag würde nicht zweimal fragen haben:

MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2) 
ON CREATE SET r.prop = 0 

MATCH (n1:Type1 {id:{id1})-[r:RELATIONSHIP]->n2:Type2 {id: {id2}) 
WITH r, CASE 
WHEN r.prop + {val} < 0 THEN 0 
ELSE r.prop + {val} END as prop 
SET r.prop = prop 

Antwort

0
MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2) 
ON CREATE SET r.prop = 
CASE 
    WHEN {val} < 0 THEN 0 
    ELSE {val} 
    END 
ON MATCH SET r.prop = 
CASE 
    WHEN r.prop + {val} < 0 
    THEN 0 
    ELSE r.prop + {val} 
    END 
0

ich denke, diese Abfrage den Trick tun sollten:

MATCH (n1:Type1 {id:{id1}), (n2:Type2 {id: {id2}) 
MERGE (n1)-[r:RELATIONSHIP]->(n2) 
ON CREATE SET r.prop = 0 
ON MATCH SET r.prop = 
CASE r.prop 
    WHEN r.prop + {val} < 0 
    THEN 0 
    ELSE r.prop + {val} 
    END 
+0

Es tut mir leid, aber das funktioniert nicht. Es fängt nicht den Fall ein, wenn r.prop + {val} <0 ist und muss r.prop auch auf {val} oder 0 auf CREATE setzen – v4gil