¿Comas en la cláusula MERGE como las hay en la cláusula MATCH?
Lo siguiente funciona bien en neo4j 4:
MATCH (a)-->(b)<--(c), (b)-->(d)
RETURN a
Pero lo siguiente devuelve un error:
MERGE (a)-->(b)<--(c), (b)-->(d)
RETURN a
Texto de error: Neo.ClientError.Statement.SyntaxError
Invalid input ',': expected whitespace, a relationship pattern, ON, FROM GRAPH, USE GRAPH, CONSTRUCT, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE UNIQUE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, CALL, RETURN, UNION, ';' or end of input (line 1, column 22 (offset: 21))
"MERGE (a)-->(b)<--(c), (b)-->(d)"
^
Si entiendo correctamente, fusionar proporciona un nivel de funcionalidad de actualización. ¿Pero la fusión es más restringida en la capacidad de coincidencia que la coincidencia? ¿Cómo fusiono patrones no lineales complejos que requieren separaciones por comas ?
Respuestas
Se creará el patrón completo MERGE
si algún elemento del patrón aún no existe. Por lo tanto, para estar seguro, siempre debe asegurarse de que cada MERGE
patrón tenga solo un elemento que podría no existir.
Es por eso que solo tiene sentido MERGE
admitir patrones con un solo término.
Por ejemplo, en lugar de esto (que no es Cypher legal, de todos modos):
MERGE
(a:Foo {id: 'a'})-[:BAR]->(b:Foo {id: 'b'})<-[:BAR]-(c:Foo {id: 'c'}),
(b)-[:BAR]->(d:Foo {id: 'd'})
RETURN a
en realidad deberías hacer esto:
MERGE (a:Foo {id: 'a'})
MERGE (b:Foo {id: 'b'})
MERGE (c:Foo {id: 'c'})
MERGE (d:Foo {id: 'd'})
MERGE (a)-[:BAR]->(b)
MERGE (b)<-[:BAR]-(c)
MERGE (b)-[:BAR]->(d)
RETURN a