ลูกน้ำในประโยค MERGE เหมือนใน MATCH clause?
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)"
^
ถ้าฉันเข้าใจถูกต้องการผสานจะให้ระดับการทำงานที่เพิ่มขึ้น แต่การผสานมีข้อ จำกัด ในความสามารถในการจับคู่มากกว่าการจับคู่หรือไม่? ฉันจะผสานรูปแบบที่ไม่ใช่เชิงเส้นที่ซับซ้อนซึ่งต้องการการคั่นด้วยเครื่องหมายจุลภาคได้อย่างไร
คำตอบ
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