Как объединить 2 выхода MATCH в середине запроса шифрования - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь написать работу над cypher-запросом в браузере neo4j версии 3.1.4 (изменение версии невозможно). Мой опыт работы с зашифрованными запросами довольно низкий.

У меня есть запрос в следующих строках:

WITH SomeCollection

MATCH (x:xType)<- someRelationalMatchLogic which contains y as part of it             // FIRST MATCH PART
        WHERE (x.name = 'test') AND some logic on y

// SECOND MATCH PART

WITH x, y, SomeCollection
  WHERE some additional post processing based on x and y value and collection values
RETURN x

Я хотел бы, чтобы следующий запрос MATCH был вставлен выше "// ЧАСТЬ ВТОРОГО ПОИСКА SECTION "

MATCH (x:xType)<- someDifferentReltionalMatchLogic which contains y as part of it
        WHERE (x.name = 'test') AND some logic on y

Чтобы я мог получить результат совпадения соединения / объединения, прежде чем продолжить выполнение оставшейся части запроса.

В настоящее время мой единственный рабочий вариант - скопировать и вставить полный запрос и использовать Второй блок совпадений вместо первого в вставленном разделе и используйте UNION между 2.

Учитывая, что фактический запрос до и после MATCH довольно велик, это кажется очень грязным и неэффективным подходом.

Единственный другой подход, который я мог придумать на основе моих поисков, - это подзапрос CALL с использованием UNION - это подзапрос для 2 MATCH, как показано здесь https://neo4j.com/docs/cypher-manual/current/clauses/call-subquery/

Но по какой-то причине этот подход CALL дает ошибки в моей версии neo4j, я думал, что могу неправильно писать свой запрос, поэтому я напрямую использовал первый пример в ссылке, и даже это дало ошибку. Например, используйте d по ссылке:

UNWIND [0, 1, 2] AS x
CALL {
  WITH x
  RETURN x * 10 AS y
}
RETURN x, y

Ошибка (и):

mismatched input '{' expecting {HexLetter, CYPHER, EXPLAIN, PROFILE, USING, PERIODIC, COMMIT, UNION, ALL, CREATE, DROP, INDEX, ON, CONSTRAINT, ASSERT, IS, UNIQUE, EXISTS, LOAD, CSV, WITH, HEADERS, FROM, AS, FIELDTERMINATOR, OPTIONAL, MATCH, UNWIND, MERGE, SET, DETACH, DELETE, REMOVE, FOREACH, IN, DISTINCT, RETURN, ORDER, BY, L_SKIP, LIMIT, ASCENDING, ASC, DESCENDING, DESC, JOIN, SCAN, START, NODE, RELATIONSHIP, REL, WHERE, SHORTESTPATH, ALLSHORTESTPATHS, OR, XOR, AND, NOT, STARTS, ENDS, CONTAINS, NULL, COUNT, FILTER, EXTRACT, ANY, NONE, SINGLE, TRUE, FALSE, REDUCE, CASE, ELSE, END, WHEN, THEN, CALL, YIELD, KEY, UnescapedSymbolicName, EscapedSymbolicName}

enter image description here

AND

extraneous input 'x' expecting {';', '(', UNION, CREATE, LOAD, WITH, OPTIONAL, MATCH, UNWIND, MERGE, SET, DETACH, DELETE, REMOVE, FOREACH, RETURN, START, CALL, YIELD, SP}

введите описание изображения здесь

Мы будем очень признательны за любые входные данные для устранения этой ошибки CALL и / или помощи в достижении объединения x и y выходных данных этих 2 блоков MATCH в этом разделе запроса, прежде чем продолжить рассмотрение любых альтернативных предложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...