While pattern matching, Cypher makes sure to not include matches where the same graph relationship is found multiple times in a single pattern. In most use cases, this is a sensible thing to do.
Example: looking for a user’s friends of friends should not return said user.
Let’s create a few nodes and relationships:
CREATE (adam:User { name: 'Adam' }),(pernilla:User { name: 'Pernilla' }),(david:User { name: 'David' }), (adam)-[:FRIEND]->(pernilla),(pernilla)-[:FRIEND]->(david)
Which gives us the following graph:
Now let’s look for friends of friends of Adam:
MATCH (user:User { name: 'Adam' })-[r1:FRIEND]-()-[r2:FRIEND]-(friend_of_a_friend) RETURN friend_of_a_friend
friend_of_a_friend |
---|
1 row |
|
In this query, Cypher makes sure to not return matches where the pattern relationships r1
and r2
point to the same graph relationship.
This is however not always desired.
If the query should return the user, it is possible to spread the matching over multiple MATCH
clauses, like so:
MATCH (user:User { name: 'Adam' })-[r1:FRIEND]-(friend) WITH friend MATCH (friend)-[r2:FRIEND]-(friend_of_a_friend) RETURN friend_of_a_friend
friend_of_a_friend |
---|
2 rows |
|
|
Copyright © 2014 Neo Technology