SQL запрос как LEFT JOIN только с группировкой по id левой таблицы и нужным id из правой

Есть 2 таблицы: volunteers (волонтёры) и volunteers_activity (деятельность волонтёров). Вторая имеет колонки id | vol_id (идентификатор волонтёра) | req_id (req_id - идентификатор запроса из 3 таблицы) и регистрирует запросы в которых участвовал волонтёр.

Нужно составить запрос, который вернёт всех волонтёров (каждого волонтёра только один раз) и в отдельном поле 'checked' (a.req_id = 60 AS checked) покажет участвует ли волонтёр в конкретном запросе (в примере запрос имеет идентификатор 60).

Запрос который почти делает то, что нужно, но при группировке он может вернуть любой из a.req_id, а не нужный мне с req_id = 60 (и тогда условие a.req_id = 60 не выполнится, хотя волонтёр в нём может участвовать).

SELECT a.req_id, a.req_id = 60 AS checked, v.* 
FROM `volunteers` v 
LEFT JOIN `volunteers_activity` a ON a.vol_id = v.id 
WHERE NOT v.deleted
GROUP BY v.id

Подскажите как изменить запрос, чтобы получить нужный результат?


Ответы (1 шт):

Автор решения: Akina
SELECT v.id, MAX(a.req_id) IS NOT NULL AS checked
FROM volunteers v 
LEFT JOIN volunteers_activity a ON a.vol_id = v.id AND a.req_id = 60
GROUP BY v.id

или

SELECT v.id, EXISTS ( SELECT NULL
                      FROM volunteers_activity a 
                      WHERE a.vol_id = v.id 
                        AND a.req_id = 60 )  AS checked
FROM volunteers v 
→ Ссылка