У меня есть две таблицы: одна содержит волонтеров, а другая - места проведения. Волонтерам выделяется по одному месту..
Идентификатор таблицы мест (venues.id) помещается в таблицу volunteers в столбце location_id (volunteers.venue_id).
Я знаю, что могу подсчитать количество совпадающих значений в столбце volunteers.venue_id,
SELECT venue_id, COUNT(*) FROM volunteers GROUP BY venue_id
Почему я хочу это сделать: чтобы пользователь мог войти и посмотреть, сколько волонтеров назначено на каждое место.
таблица: волонтеры - столбцы: id, name, location_id
таблица: места проведения - столбцы: идентификатор, название_ площадки
volunteers.venue_id = venues.id
Я знаю, что это будет какое-то заявление о соединении, поэтому оно будет подсчитывать каждое место встречи, затем сопоставить volunteers.venue_id с venues.id и распечатать venues.venue_name вместе с подсчетом.
Как мне присоединиться к двум таблицам, чтобы распечатать название места проведения и рядом с ним указать количество добровольцев с этим идентификатором места проведения?






SELECT venues.venue_name, COUNT(volunteers.*) AS cvolun
FROM venues
INNER JOIN volunteers
ON venues.id = volunteers.venue_id
Это даст вам все места проведения, а те, у кого нет добровольцев, появятся с 0 volunteer_count.
select venues.venue_name, count(*) as volunteer_count
from venues
left outer join volunteers
on venues.id = volunteers.venue_id
group by venues.venue_name
[EDIT] Я только что понял, что вы просили MySQL. Я не могу вспомнить, использует ли MySQL LEFT JOIN или LEFT OUTER JOIN. Приведенный выше синтаксис подходит для SQLSERVER. Ключевым моментом является внешнее объединение вместо внутреннего, чтобы получить места, где нет добровольцев.
FWIW, как LEFT JOIN, так и LEFT OUTER JOIN работают в MySQL, и оба они работают одинаково.
Внутреннее объединение означает, что он сообщает только о местах, где есть хотя бы один волонтер. Он не сообщает ни о каких местах, где нет добровольцев. Вот почему для этой проблемы необходимо внешнее соединение.