Проверьте идентификаторы из разных таблиц - PullRequest
1 голос
/ 05 июля 2019

У меня есть две таблицы: «рота» (1) и «волонтер» (2). Столбцы имени и фамилии в (2), но сдвиги в (1). С помощью следующего запроса я могу видеть имена тех, кто представил свои смены, но я хотел бы видеть тех, кто этого не сделал. Не могу понять, как. Любая помощь?

SELECT COUNT(rota.shift_id), rota.volunteer_id, volunteer.firstname, volunteer.lastname
FROM rota 
INNER JOIN volunteer ON rota.volunteer_id=volunteer.id
GROUP BY volunteer_id;

Ответы [ 2 ]

4 голосов
/ 05 июля 2019

Вы хотите 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;
0 голосов
/ 05 июля 2019

Это было решение:

SELECT volunteer.id, volunteer.firstname, volunteer.lastname, COUNT(rota.shift_id), rota.volunteer_id, volunteer.firstname, volunteer.lastname 
FROM volunteer 
LEFT JOIN rota ON rota.volunteer_id = volunteer.id 
GROUP BY volunteer.id
HAVING COUNT(rota.shift_id) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...