Mysql
 sql >> Base de données >  >> RDS >> Mysql

Base de données normalisée - UN à PLUSIEURS - Recherche parmi tous les ensembles de données joints

Voici une façon de procéder :

    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

Une autre façon qui pourrait être plus efficace. Cela suppose qu'il n'y a pas de doublons dans song_genre. COUNT(*) =X où X est égal au nombre de genres répertoriés.

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