Prev |  | Next

## 7.4. Uniqueness

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
`Node[2]{name:"David"}`

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
`Node[2]{name:"David"}`
`Node[0]{name:"Adam"}`

Copyright © 2014 Neo Technology

Prev | Up | Next
| Home |