4

I have 2 nodes: (A), (B), connected by [:FRIEND]

When I run the following command,

start n = node(*) match (n)-[r:FRIEND]-(b) return n.name, b.name;

it returns 2 rows: A, B and B, A.

I wonder, how to make it return only one record, because the relationship is bidirectional, A -[:FRIEND]-B and B-[:FRIEND]-A is considered same result.

Thanks.

janetsmith
  • 8,562
  • 11
  • 58
  • 76

1 Answers1

10

One trick is to add a where on the IDs, so you get them in a consistent order as well:

start n = node(*) 
match (n)-[r:FRIEND]-(b) 
where id(n) < id(b) 
return n.name, b.name;

http://console.neo4j.org/r/1ry0ga

If you have multiple relationships between them (in both directions, for example), you can add a distinct modifier to get the same results:

start n = node(*) 
match (n)-[r:FRIEND]-(b) 
where id(n) < id(b) 
return distinct n.name, b.name;
Eve Freeman
  • 32,467
  • 4
  • 86
  • 101