WITH также используется для отделения чтения от обновления графика.
Каждая часть запроса должна быть доступна только для чтения или только для записи. когда
переход от записывающей части к читающей части, переключение должно быть сделано
с предложением WITH.
https://neo4j.com/docs/developer-manual/current/cypher/clauses/with/#with-introduction
Так что вам нужно добавить WITH
между частями (нам нужна промежуточная переменная result
, потому что в противном случае вернется только последний результат):
MATCH (u) WHERE u.WF_ID = 8
MATCH (v) WHERE v.WF_ID = 10
CREATE (u)-[r:TRIGGERS]->(v)
WITH [[u, v, r]] AS result
MATCH (u) WHERE u.WF_ID = 11
MATCH (v) WHERE v.WF_ID = 12
CREATE (u)-[r:TRIGGERS]->(v)
WITH result + [[u, v, r]] AS result
MATCH (u) WHERE u.WF_ID = 11
MATCH (v) WHERE v.WF_ID = 14
CREATE (u)-[r:TRIGGERS]->(v)
WITH result + [[u, v, r]] AS result
RETURN result
Но этот вариант запроса уродлив. Поскольку результат каждой части не используется в следующей, мы можем использовать UNION
:
MATCH (u) WHERE u.WF_ID = 8
MATCH (v) WHERE v.WF_ID = 10
CREATE (u)-[r:TRIGGERS]->(v)
RETURN u, v, r
UNION
MATCH (u) WHERE u.WF_ID = 11
MATCH (v) WHERE v.WF_ID = 12
CREATE (u)-[r:TRIGGERS]->(v)
RETURN u, v, r
UNION
MATCH (u) WHERE u.WF_ID = 11
MATCH (v) WHERE v.WF_ID = 14
CREATE (u)-[r:TRIGGERS]->(v)
RETURN u, v, r
Или мы можем сделать запрос еще более компактным, используя UNWIND
:
WITH [[8, 10], [11, 12], [11, 14]] AS pids
UNWIND pids AS ids
MATCH (u) WHERE u.WF_ID = ids[0]
MATCH (v) WHERE v.WF_ID = ids[1]
CREATE (u)-[r:TRIGGERS]->(v)
RETURN u, v, r