Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Banco de dados normalizado - UM para MUITOS - Pesquise em todos os conjuntos de dados unidos


Aqui está uma maneira de fazer isso:
    SELECT DISTINCT song.song_id, song.title
    FROM song
    INNER JOIN (SELECT songid FROM song_genre WHERE song_genre.genre_id ='1') genre1 
         ON genre1.song_id = song.song_id
    INNER JOIN (SELECT songid FROM song_genre WHERE song_genre.genre_id ='2') genre2 
         ON genre2.song_id = song.song_id

Outra maneira que pode ser mais eficiente. Isso pressupõe que não há dups em song_genre. COUNT(*) =X onde X é igual ao número de gêneros listados.
SELECT DISTINCT song.song_id, song.title
FROM song
INNER JOIN (SELECT songid, COUNT(*) FROM song_genre 
WHERE genre_id IN ('1','2') 
GROUP BY songid HAVING COUNT(*) = 2) genre1 ON genre1.song_id = song.song_id