Cypher - объединение 2 запросов оценивает, где условие истинно - PullRequest
0 голосов
/ 01 февраля 2019

Это мой запрос:

MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4)-[:REL_4*]->(n4_2:Node4) 
    WHERE  n4_2.property='Green' 

MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4) 
    WHERE n4_1.property='Green'

Я хочу объединить эти 2 запроса.То, чего я пытаюсь добиться, это RETURN n4_2, если верхнее значение где верно, n4_1, если нижнее значение правильно, вернуть null, если совпадение не найдено вообще.Здесь не используется объединение, поскольку столбцы не имеют одинаковых имен.

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете использовать UNION в этом случае.

MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4)-[:REL_4*]->(n4_2:Node4) 
WHERE  n4_2.property='Green' 
RETURN n4_2 AS node
UNION ALL 
MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4) 
WHERE n4_1.property='Green'
RETURN n4_1 AS node

В вашем случае n4_2 и n4_1 оба имеют один и тот же узелТип (т. е. Node4).

Объединение также работает, даже если типы узлов различаются, например, один - это Персона, а другой - Фильм, например:

MATCH (n1:Person) WHERE n1.born=1961 RETURN  n1 as node
UNION ALL 
MATCH (n2:Person) WHERE n2.born=1967 RETURN  n2 as node
UNION ALL 
MATCH (m1:Movie) WHERE m1.released=2006 RETURN  m1 as node
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...