Hay varias formas. Una de ellas es establecer que como deben tener dos estilos asignados al mismo disco, el disco debe estar instanciado dos veces en el resultado, si o si:
Código SQL:
Ver originalSELECT
D.nombre
FROM
discos D
INNER JOIN discos_estilos ED USING (id_disco)
INNER JOIN estilos E USING(id_estilos)
WHERE
E.id_estilos IN (2, 4)
GROUP BY D.nombre
HAVING COUNT(*) = 2;
Otra posibilidad es invocar dos veces la tabla estilos y que empareje los registros de modo de cumplir las dos condiciones si o si:
Código SQL:
Ver originalSELECT DISTINCT
D.nombre
FROM
discos D
INNER JOIN discos_estilos ED USING (id_disco)
INNER JOIN estilos E1 USING(id_estilos)
INNER JOIN estilos E2 USING(id_estilos)
WHERE
E1.id_estilos = 2 AND E2.id_estilos = 4;