Dear all.
I am trying to create relationship between 2 node.
match (s1:Share {code:'VIC',numberOfShare:80000000}),(s2:Share {code:'VIC',numberOfShare:119983000}),(c:Company)
create (s1)-[r:INCREASE_SHARE]->(s2)
set r.increaseWay='Chào bán 40 triệu cổ phiếu phổ thông, mệnh giá 10.000 đồng cho cổ đông hiện hữu theo tỷ lệ là 2:1 với giá chào bán là 10.000 đồng/cp '
return s1,s2,c
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.
Regarding why the engine doesn't return you any result when specifying the id property, is that each node and relationship in neo4j has an internal id. This internal id is shown in the UI with angular parentheses (<id>) and should not be used, as per documentation: https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-elementid, read the point 2.
Your query filters by the id property, but the engine searches for a user-defined property called id, not the internal one.
Just ignore the internal property and define an identification property on your own. You can even call it id, but in this case the id property would be recognized by your query because it is user-defined and very different from the internal property.
As a side note, you can retrieve the internal node id with the id() function, but it is currently deprecated and will be probably removed. The elementId() function that I put in the link above returns an even more complex string.
You can see in my "create" code to create the test data that I set a user defined 'id' property. I do this all the time when testing so I have a unique identifier to match on. I guess it confused you as @cdavide8 pointed out. You created your own nodes using different properties, then tried to use the internal Id in my code, which used my defined 'id' property.
You need to use unique identifiers for your nodes, so you can reference them individually. That is why I create an 'id' property. You can use anything, but you need to set the node's identifier property you define to a unique value. You will need a means of generating unique identifiers in a production environment. You can use a UUID if you don't have a generator.