MATCH 절에있는 것처럼 MERGE 절에 쉼표가 있습니까?
Aug 18 2020
다음은 neo4j 4에서 잘 작동합니다.
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는 upsert 기능 수준을 제공합니다. 그러나 일치보다 일치 기능에서 병합이 더 제한됩니까? 쉼표로 구분해야하는 복잡한 비선형 패턴을 어떻게 병합 합니까?
답변
1 cybersam Aug 18 2020 at 18:36
전체 MERGE
경우 패턴이 생성됩니다 어떤 패턴의 항목이 아직 존재하지 않습니다. 그래서, 안전을 위해, 당신은 항상 확인 모든해야 MERGE
패턴 만이 하나 개 존재하지 않을 수도 있습니다 항목을 선택합니다.
그렇기 때문에 MERGE
단일 용어로 패턴을 지원 하는 것이 합리적입니다 .
예를 들어, (어쨌든 합법적 인 Cypher가 아닙니다) 대신 :
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