When you match on multiple patterns on the same line, you will get a cartesian product of the results. In your case, you are matching on two specific "Share" nodes and all "Company" nodes. The two "Share" nodes will create one row (if they are each unique). This is then duplicated for every "Company" node, thus you have multiple rows generated with this same two "Share" Nodes. This results in the multiple relationships. Based on the diagram, you must have eight "Company" nodes.
The resolution is to remove the (c:Company
pattern in your match.
Here is an example
Test data:
create(:X{id:0}), (:X{id:1}), (:Company{id:0}), (:Company{id:1}), (:Company{id:2})
Query:
match(n:X{id:0}), (m:X{id:1}), (c:Company)
return n.id, m.id, c.id
As you can see, three rows were generated (one per Company node), with the same two X nodes per line.
If I add the relationships:
match(n:X{id:0}), (m:X{id:1}), (c:Company)
create(n)-[r:REL]->(m)
return n, m, r
The proper solution:
match(n:X{id:0}), (m:X{id:1})
create(n)-[r:REL]->(m)
return n, m, r