MATCH cümlesinde olduğu gibi MERGE cümlesinde virgül var mı?

Aug 18 2020

Aşağıdakiler neo4j 4'te iyi çalışıyor:

MATCH (a)-->(b)<--(c), (b)-->(d)
RETURN a

Ancak aşağıdakiler bir hata döndürür:

MERGE (a)-->(b)<--(c), (b)-->(d)
RETURN a

Hata metni: 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)"
                     ^

Doğru anlarsam, birleştirme, bir üst düzey yükseltme işlevi sağlar. Ancak birleştirme, eşleştirme yeteneği açısından eşleşmeden daha mı kısıtlı? Virgülle ayırma gerektiren karmaşık doğrusal olmayan desenleri nasıl birleştiririm ?

Yanıtlar

1 cybersam Aug 18 2020 at 18:36

Tüm MERGE eğer desen oluşturulacak herhangi desende öğesi henüz mevcut değil. Bu nedenle, güvende olmak için, her MERGEdesende var olmayabilecek yalnızca bir öğe olduğundan emin olmalısınız .

Bu nedenle, MERGEkalıpları yalnızca tek bir terimle desteklemek mantıklıdır .

Örneğin, bunun yerine (zaten yasal Cypher değildir):

MERGE
  (a:Foo {id: 'a'})-[:BAR]->(b:Foo {id: 'b'})<-[:BAR]-(c:Foo {id: 'c'}),
  (b)-[:BAR]->(d:Foo {id: 'd'})
RETURN a

bunu gerçekten yapmalısın:

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