Я пытаюсь вернуть MAX
gameweek доступного match
определенного round
, для этого я использовал функцию MAX
, но я получил все matches
gameweeks раунда, вместо этого я должен получить только matches
которые имеют MAX
gameweek,
Это мой запрос:
SELECT m.id, m.round_id, m.gameweek
FROM 'match' m
LEFT JOIN competition_rounds r ON m.round_id = r.id
LEFT JOIN competition_seasons s ON r.season_id = s.id
LEFT JOIN competition c ON c.id = s.competition_id
WHERE 1 AND m.status = 5 AND m.round_id = 488 OR m.round_id = 489 OR m.round_id = 490 OR m.round_id = 491
AND m.gameweek = (SELECT MAX(gameweek) FROM 'match' WHERE (round_id = 488) OR (round_id = 489) OR (round_id = 490) OR (round_id = 491))
результат:
[
{
"id": "1979011",
"round_id": "488",
"gameweek": "1",
},
{
"id": "1979012",
"round_id": "488",
"gameweek": "2",
},
{
"id": "1979013",
"round_id": "489",
"gameweek": "1",
},
{
"id": "1979014",
"round_id": "489",
"gameweek": "2",
},
Я ожидаю вместо этого только матч, который имеет id: 1979012, 1979014. Почему я получаю все матчи gameweeks?
Я думаю, вам просто нужны скобки. Или еще лучше, используйте in
:
WHERE 1 AND
m.status = 5 AND
m.round_id IN (488, 489, 490, 491) AND
m.gameweek = (SELECT MAX(m2.gameweek)
FROM 'match' m2
WHERE m2.round_id IN (488, 489, 490, 491)
)
Для меня совершенно непонятно, почему вы объединяете столько таблиц вместе. Вы ссылаетесь только на столбцы из match
, так что это будет единственная таблица, необходимая в запросе.
m.round_id IN (488, 489, 490, 491)
и теперь, кажется, работает, но у меня есть еще одна проблема, возвращенные совпадения соответствуют только 488 идентификатору раунда, другой раунд отсутствует ..
x AND y OR z
- это то же самое, что( x AND y ) OR z
, а неx AND ( y OR z )