Полезно начать перечислять отношения между таблицами (объектами) на простом английском языке.Например:
- Пользователь принадлежит к коду города, а у кода города много пользователей.
- Событие происходит в коде города, а у кода города много событий.
Оба оператора описывают отношения «многие ко многим», поэтому вам нужны эти две таблицы (иногда называемые таблицы перекрестных ссылок ).
Запись этих операторов всегда помогаетчтобы понять проблему и задать вопросы об этом.Если предположить, что приведенные выше утверждения верны, то наличие этих двух таблиц users_areas
и events_areas
также является правильным.Чтобы построить оператор select
, обратите внимание, что есть только один столбец, который объединяет обе таблицы: area_id
(который, кстати, поместился бы в int
, использование bigint
- это огромный излишним, и я думаю, что то же самое относится к user_id
и event_id
).Таким образом, area_id
- это столбец, который необходимо использовать для сопоставления их (правильный термин для присоединения к ним).
Вот ваш оператор выбора:
SELECT ea.event_id, ea.area_id, ua.user_id
FROM events_areas ea
INNER JOIN user_areas ua ON ea.area_id = ua.area_id
Или, если у вас также есть таблица event
и таблица user
, что, вероятно, имеет место, мы расширяем select
выглядеть так:
SELECT e.name, u.name
FROM events_areas ea
INNER JOIN user_areas ua ON ea.area_id = ua.area_id
INNER JOIN users u ON u.user_id = ua.user_id
INNER JOIN events e ON e.event_id = ue.event_id