Когда я добавляю необязательное совпадение к своему уже работающему запросу, выбор расширяется.
У меня есть структура относительно игроков в играх следующим образом
(Игрок) - [есть] -> (результат) - [в] -> (игра)
И когда игроки выступают друг против друга, в окончательных данных все будет выглядеть так
(Player_1) - [есть] -> (result_1) - [в] -> (игра) <- [в] - (result_2) - [есть] - (player_2) </p>
Учитывая список result_1 идентификаторов, я пытаюсь найти соответствующие result_2
Основной запрос
MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)
WHERE r.id IN [30,32]
RETURN r, or, g, m
возвращает именно то, что я ожидаю:
- (30) - (g1) - (OR1)
- (32) - (g2) - (OR2) * * тысяча двадцать-один
Но игры могут также (в необязательном порядке) совпадать, и этот запрос
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
возвращает
- (30) - (g1) - (OR1)
- (32) - (g2) - (or2)
- (33) - (g3) - (OR3)
- Что бы ни случилось, чтобы соответствовать структуре p-r-g-r-p, но безотносительно к списку [30,32]
Я подозреваю, что это как-то связано с зеркальным характером данных, потому что если я удаляю r из возвращенных значений, я все равно получаю (30) и (32) обратно как или но я не могу понять, почему и как это остановить.
Я пытался добавить С перед опциональным, но это не имеет значения.