Вы не можете использовать выражение внутри этого CREATE
- но вы можете переместить это выражение в оператор WITH
, чтобы присвоить его переменной, а затем использовать эту переменную при создании.
Последняя строка может быть заменена на:
/* Lets steal their kill node and set them as our new target unless of course someone decided to kill us and nab them */
WITH COALESCE(t, a) as n, t
CREATE (n)-[nr:TARGET {killed:false,confirmed:false}]->(t)
Что прекрасно скомпилируется, но есть некоторые другие проблемы в запросе, которые мне пришлось сначала исправить:
- Строка 2,
SET r.comfirmed...
оканчивается на WITH
, но после нее нет переменных - Строка 3,
MATCH (t)<-...
оканчивается на DELETE
, но следующая строка начинается с MATCH
- вы нужен WITH
между двумя
Итак, запрос, который я получаю в итоге:
MATCH (a:Student)-[r:TARGET]->(t:Student) WHERE r.uuid = $uuid
/* Lets Kill the student and set confirmed to true */
SET r.confirmed = true, t.IsDead = true
/* Delete any teachers that may have the target of the student*/
WITH a, t, r
MATCH (t)<-[tr:TARGET]-(:Teacher) DELETE r
/* Get the assassinated persons target. Set them as X. */
WITH a, t
MATCH (t)-[ar:TARGET]->(x:Student) WHERE ar.confirmed = false AND x.IsDead = false
/* Lets deal with anyone who inherited our target if we are dead :(*/
OPTIONAL MATCH (t)<-[sr:TARGET]-(ss:Student) WHERE sr.confirmed = false AND ss.IsDead = false
/* Lets steal their kill node and set them as our new target unless of course someone decided to kill us and nab them */
WITH COALESCE(t, a) as n, t
CREATE (n)-[nr:TARGET {killed:false,confirmed:false}]->(t)
Но даже тогда это выглядит неправильно - COALESCE
всегда разрешит в t
, потому что для достижения этого в запросе t
должно иметь значение, поэтому последний CREATE
просто создаст связь между t
и самим собой. Также: OPTIONAL MATCH
вводит новую переменную ss
, но тогда эта переменная больше нигде не используется (что делает необязательное совпадение несколько избыточным).
Я предполагаю, что COALESCE
должно быть между ss
и a
, а не t
и a
, но трудно сказать.