MATCH句にあるようなMERGE句のコンマ?
Aug 18 2020
以下はneo4j4で正常に機能します。
MATCH (a)-->(b)<--(c), (b)-->(d)
RETURN a
ただし、以下はエラーを返します。
MERGE (a)-->(b)<--(c), (b)-->(d)
RETURN a
エラーテキスト: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)"
^
私が正しく理解していれば、mergeはあるレベルのアップサート機能を提供します。しかし、マージは一致よりも一致機能が制限されていますか?カンマ区切りが必要な複雑な非線形パターンをマージするにはどうすればよいですか?
回答
1 cybersam Aug 18 2020 at 18:36
全体の MERGE
場合はパターンが作成される任意のパターン内の項目がまだ存在していません。したがって、安全のために、すべてのMERGE
パターンに存在しない可能性のあるアイテムが1つだけあることを常に確認する必要があります。
これがMERGE
、単一の用語でパターンをサポートすることだけが理にかなっている理由です。
たとえば、これの代わりに(とにかく合法的なサイファーではありません):
MERGE
(a:Foo {id: 'a'})-[:BAR]->(b:Foo {id: 'b'})<-[:BAR]-(c:Foo {id: 'c'}),
(b)-[:BAR]->(d:Foo {id: 'd'})
RETURN a
あなたは実際にこれをするべきです:
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