MySQL несколько много ко многим соединениям - PullRequest
2 голосов
/ 10 января 2012

У меня события , events_styles , events_formats таблицы (у события может быть много стилей и много форматов) Я пытаюсь отфильтровать события, которые имеют events_stylesjoin и events_formats присоединиться.Таким образом, запрос должен выбрать все события, которые имеют определенный стиль И конкретный формат - мои попытки пока:

SELECT * FROM events  
JOIN events_styles ON events.id = events_styles.event_id   
JOIN events_formats ON events.id = events_formats.format_id   
WHERE events_styles.style_id = 3  AND events_formats.format_id = 1;

Empty set (0.00 sec)

SELECT * FROM events_styles
WHERE events_styles.style_id = 3   
+----------+----------+
| event_id | style_id |
+----------+----------+
|        3 |        3 |
|        2 |        3 |
|        4 |        3 |
+----------+----------+
3 rows in set (0.00 sec)

SELECT * FROM events_formats
WHERE events_formats.format_id = 1    
+----------+-----------+
| event_id | format_id |
+----------+-----------+
|        1 |         1 |
|        3 |         1 |
|        4 |         1 |
+----------+-----------+
3 rows in set (0.00 sec)

Итак, первый запрос должен вернуть событие с идентификатором 4?Я уверен, что мне нужно объединить 2-й и 3-й запрос в подзапрос, но я не уверен в синтаксисе - спасибо

1 Ответ

1 голос
/ 10 января 2012

Вы очень близки!

Ваш запрос должен быть:

SELECT * FROM events   
JOIN events_styles ON events.id = events_styles.event_id    
JOIN events_formats ON events.id = events_formats.event_id   
WHERE events_styles.style_id = 3  
AND events_formats.format_id = 1;

Присоединяясь к format_id, а не к event_id, вы получите только event_id = 1, у которого нет идентификатора стиля соответствияиз 3. Вот где ты ошибся: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...