Опциональное совпадение расширяет запрос - PullRequest
0 голосов
/ 18 апреля 2019

Когда я добавляю необязательное совпадение к своему уже работающему запросу, выбор расширяется.

У меня есть структура относительно игроков в играх следующим образом (Игрок) - [есть] -> (результат) - [в] -> (игра)

И когда игроки выступают друг против друга, в окончательных данных все будет выглядеть так (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

возвращает именно то, что я ожидаю:

  1. (30) - (g1) - (OR1)
  2. (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

возвращает

  1. (30) - (g1) - (OR1)
  2. (32) - (g2) - (or2)
  3. (33) - (g3) - (OR3)
  4. Что бы ни случилось, чтобы соответствовать структуре p-r-g-r-p, но безотносительно к списку [30,32]

Я подозреваю, что это как-то связано с зеркальным характером данных, потому что если я удаляю r из возвращенных значений, я все равно получаю (30) и (32) обратно как или но я не могу понять, почему и как это остановить.

Я пытался добавить С перед опциональным, но это не имеет значения.

1 Ответ

2 голосов
/ 18 апреля 2019

Предложение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...