#neo4j #cypher
#neo4j #шифр
Вопрос:
Есть ли способ дублировать результаты запроса в другую переменную, а затем выполнить некоторую фильтрацию по второй переменной, чтобы потенциально возвращались два разных результата?
Я пытаюсь сначала сохранить путь к переменной, затем присвоить этот результат второй переменной, затем выполнить WHERE для этой второй переменной, возвращая результаты из исходного запроса (первая переменная)
MATCH
(a:Account {id : '3edcfba7-e95b-4d22-9793-e5f983ebde33'})
MATCH
(target:Vertex { id : '59255ad6-0397-4b2d-9e69-6999131cea16'})
<-[:PARENT*]-
(a)
OPTIONAL MATCH
p=
(new_parent:Vertex {id : '3a63f643-f437-4415-b046-b324aa697f42'})
<-[:PARENT*]-
(a)
WITH
p
, target
, p AS child
WHERE
NONE(x IN nodes(child) WHERE x = target)
RETURN
p
, target
, child // this can return null
Ответ №1:
Вы можете использовать CASE
предложение для генерации child
переменной.
Например:
MATCH
(target:Vertex { id : '59255ad6-0397-4b2d-9e69-6999131cea16'})
<-[:PARENT*]-
(a:Account {id : '3edcfba7-e95b-4d22-9793-e5f983ebde33'})
OPTIONAL MATCH
p=
(new_parent:Vertex {id : '3a63f643-f437-4415-b046-b324aa697f42'})
<-[:PARENT*]-
(a)
RETURN
p
, target
, CASE WHEN NONE(x IN NODES(p) WHERE x = target) THEN p END AS child
CASE
Предложение будет сгенерировано NULL
, если ни одно из WHEN
предложений не применяется и ELSE
предложения нет.