[Avg. reading time: 7 minutes]

Relation

CREATE - Always creates a new relationship, regardless of whether it already exists. Creates a duplicate if already exists.

MERGE - Creates if not exists. Idempotent.


// Create a Relation
MATCH (a:Student),(b:Course) WHERE a.firstname = 'Rachel' AND b.id = 'C001' 
CREATE (a)-[:TAKING]->(b);

MATCH (a:Student),(b:Course) WHERE a.firstname = 'Rachel' AND b.id = 'C003' 
MERGE (a)-[:TAKING]->(b);

//Relation Set wrong way
MATCH (a:Student),(b:Course) WHERE a.firstname = 'Monica' AND b.id = 'C001' 
MERGE (a)<-[:TAKING]-(b);

// Delete the relation
MATCH (a:Student)<-[r:TAKING]-(b:Course) WHERE a.firstname = 'Monica' AND b.id = 'C001' DELETE r;

// Recreat the relation
MATCH (a:Student),(b:Course) WHERE a.firstname = 'Monica' AND b.id = 'C001' 
MERGE (a)-[:TAKING {grade:"B+"}]->(b);

//
MATCH (a:Student),(b:Course),(c:Faculty) WHERE a.id = 101 AND b.id = 'C003' AND c.id='F003'
MERGE (c)-[:TEACHING]->(b)<-[:TAKING {grade:"A-",semester:"Spring2022"}]-(a);

// this MERGEs duplicate link between Tony and DW
MATCH (a:Student),(b:Course),(c:Faculty) WHERE a.id = 103 AND b.id = 'C003' AND c.id='F003'
MERGE (c)-[:TEACHING]->(b)<-[:TAKING {grade:"A-",semester:"Spring2022"}]-(a);

// This way avoids it but it also doesnt MERGE Ross and DW
MATCH (a:Student),(b:Course),(c:Faculty) WHERE a.id = 103 AND b.id = 'C003' AND c.id='F003' AND NOT (c)-[:TEACHING]->(b)
MERGE (c)-[:TEACHING]->(b)<-[:TAKING {grade:"A-",semester:"Spring2022"}]-(a);


MATCH (a:Student),(b:Course) WHERE a.id = 103 AND b.id = 'C003' 
MERGE (a)-[:TAKING {grade:"A-"}]->(b);

MATCH (a:Student),(b:Course) WHERE a.id = 104 AND b.id = 'C004' 
MERGE (a)-[:TAKING {grade:"A"}]->(b);

MATCH (a:Student),(b:Course) WHERE a.id = 105 AND b.id = 'C005' 
MERGE (a)-[:TAKING {grade:"A"}]->(b);

MATCH (a:Student),(b:Course),(c:Faculty) WHERE a.id = 106 AND b.id = 'C004' AND c.id='F001'
MERGE (a)-[:TAKING {grade:"B+"}]->(b)<-[:TEACHING]-(c);


MATCH (a:Student),(b:Course),(c:Faculty) WHERE a.id = 106 AND b.id = 'C002' AND c.id='F002'
MERGE (a)-[:TAKING {grade:"A-"}]->(b)<-[:TEACHING]-(c);



MATCH (a:Student{firstname:"Joey"})-[r]-(b:Course{id:"C002"})
SET r.grade = "A", r.semester="Spring2022"


MATCH (a:Student{firstname:"Monica"})-[r]-(b:Course{id:"C001"})
SET r.grade = "B+"



MATCH (a:Student),(b:Course),(c:Faculty) WHERE a.id = 101 AND b.id = 'C001' AND c.id='F001'
MERGE (c)-[:TEACHING]->(b);


MATCH (a:Student),(b:Course),(c:Faculty) WHERE a.id = 103 AND b.id = 'C003' AND c.id='F003'
MERGE (c)-[:TEACHING]->(b);


MATCH (a:Student)<-[r:TAKING]-(b:Course) WHERE a.firstname = 'Ross' AND b.id = 'C003' DELETE r;

#neo4j #relationVer 5.5.3

Last change: 2025-10-15