Я довольно новичок в neo4j и cypher.У меня есть таблица Transaction и таблица Person, которую я хотел бы связать следующим образом (в конечном итоге имеет значение только отношение rel3
):
MATCH (t:Transaction),(p1:Person)
WHERE p1.id = t.id1
CREATE (p1)-[:rel1]->(t)
MATCH (t:Transaction),(p2:Person)
WHERE p2.id = t.id2
CREATE (t)-[:rel2]->(p2)
MATCH (p1:Person)-[:rel1]->(t:Transaction)-[:rel2]->(p2:Person)
CREATE (p1)-[:rel3]->(p2)
Однако мне было интересно, есть ли способизбежать этого двойного декартова произведения и все же достичь той же цели.Производительность действительно очень важна для меня, так как я обработал миллионы строк.Поэтому я попробовал несколько модификаций и в итоге получил эту версию:
MATCH (t:Transaction)
WITH t
MATCH (p1:Person {id : t.id1})
WITH n1, t
MATCH (p2:Person {id : t.id2})
CREATE (p1)-[:rel3]->(p2)
Проще читать и понимать, но по команде PROFILE
делает то же самое.Есть идеи улучшить этот код?