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 шт):
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