Когда я добавляю необязательное совпадение к моему уже работающему запросу, выбор расширяется.
У меня есть структура относительно игроков в играх следующим образом (игрок)-[получил]->(результат)-[в]->(игра)
И поскольку игроки противостоят друг другу, в окончательных данных все будет выглядеть так. (игрок_1)-[получил]->(результат_1)-[в]->(игра)<-[в]-(результат_2)-[получил]-(игрок_2)
Учитывая список идентификаторов результат_1, я пытаюсь найти соответствующий результат_2
Основной запрос
MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)
WHERE r.id IN [30,32]
RETURN r, or, g, m
возвращает именно то, что я ожидаю:
Но игры также могут быть в (необязательном) совпадении, и этот запрос
MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)
OPTIONAL MATCH (g)<-[:Contains]-(m:Match)
WHERE r.id IN [30,32]
RETURN r, or, g, m
возвращается
Я подозреваю, что это как-то связано с зеркальной природой данных, потому что, если я удаляю
Я пытался добавить With перед необязательным, но это не имеет значения.





Предложение WHERE изменяет непосредственно предшествующее предложение [OPTIONAL] MATCH или WITH.
Вам нужно переместить предложение WHERE так, чтобы оно располагалось сразу после начального MATCH, чтобы оно ограничивало r, как вы и предполагали. Так:
MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)
WHERE r.id IN [30,32]
OPTIONAL MATCH (g)<-[:Contains]-(m:Match)
RETURN r, or, g, m
Зная это, это кажется совершенно очевидным на самом деле.