Tengo tablas de eventos , estilos_de_eventos , formatos_de_eventos (un evento puede tener muchos estilos y muchos formatos) Estoy tratando de filtrar eventos que tienen una unión events_styles y events_formats. Entonces, la consulta debe seleccionar todos los eventos que son de un estilo particular Y un formato particular, mis intentos hasta ahora:

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)

Entonces, ¿la primera consulta debería devolver el evento con id 4? Estoy seguro de que necesito combinar la segunda y la tercera consulta en una subconsulta, pero no estoy seguro de la sintaxis, gracias

2
enkdr 10 ene. 2012 a las 17:18
Te patearás a ti mismo; su condición de unión events.id = events_formats.format_id debe ser events.id = events_formats.event_id
 – 
dash
10 ene. 2012 a las 17:21

1 respuesta

La mejor respuesta

¡Estás muy cerca!

Su consulta debe ser:

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;

Al unirse en format_id y no event_id, solo obtendrá event_id = 1, que no tiene una identificación de estilo correspondiente de 3. Ahí es donde se equivocó :-)

1
dash 10 ene. 2012 a las 17:25