Несколько запросов на совпадение в одном запросе - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующие записи в моей базе данных neo4j

(:A)-[:B]->(:C)-[:D]->(:E)

(:C)-[:D]->(:E)

Я хочу получить все узлы C и все отношения и связанные узлы.Если я сделаю запрос

Match (p:A)-[o:B]->(i:C)-[u:D]->(y:E) 
Return p,o,i,u,y

, я получу первое совпадение, если я выполню

Match (i:C)-[u:D]->(y:E) 
Return i,u,y

Я получу второе совпадение.

Но я хочу, чтобы обаих в одном запросе.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Похоже, вы слишком конкретны в своем запросе.Если вам просто нужно для всех: узлов C, связанных узлов и отношений, то это должно работать:

MATCH (c:C)-[r]-(n)
RETURN c, r, n
0 голосов
/ 26 сентября 2018

Самый простой способ - объединить запросы и дополнить неиспользуемые переменные нулем (поскольку все шифры UNION должны иметь одинаковые возвращаемые столбцы

Match (p:A)-[o:B]->(i:C)-[u:D]->(y:E) 
Return p,o,i,u,y
UNION
Match (i:C)-[u:D]->(y:E) 
Return NULL as p, NULL as o,i,u,y

В вашем примере, однако, второе совпадение фактически соответствуетпоследняя половина первой цепочки, так что, может быть, вы действительно хотите что-то более прямое, как ...

MATCH (c:C)
OPTIONAL MATCH (connected)
WHERE (c)-[*..20]-(connected)
RETURN c, COLLECT(connected) as connected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...