Вы хотите LEFT JOIN
- и поставить таблицу volunteer
первой, потому что вы хотите, чтобы все строки из этой таблицы:
SELECT v.id, v.firstname, v.lastname, COUNT(r.shift_id), rota.volunteer_id
FROM volunteer v LEFT JOIN
rota r
ON r.volunteer_id = v.id
GROUP BY v.id;
Обратите внимание, что вам не нужно включать все столбцы изvolunteer
в GROUP BY
, поскольку v.id
уникально идентифицирует каждую строку в наборе результатов.
РЕДАКТИРОВАТЬ:
Если вы хотите, чтобы добровольцы были без смен, то используйте NOT EXISTS
:
SELECT v.*
FROM volunteer v
WHERE NOT EXISTS (SELECT 1
FROM rota r
WHERE r.volunteer_id = v.id
);
Вы можете сделать то же самое с LEFT JOIN
:
SELECT v.id, v.firstname, v.lastname
FROM volunteer v LEFT JOIN
rota r
ON r.volunteer_id = v.id
WHERE r.volunteer_id IS NULL;