Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Normalisierte Datenbank - ONE to MANY - Durchsuchen Sie alle verbundenen Datensätze

Hier ist eine Möglichkeit, dies zu tun:

    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

Ein anderer Weg, der effizienter sein könnte. Dies setzt voraus, dass es in song_genre keine Dups gibt. COUNT(*) =X wobei X gleich der Anzahl der aufgelisteten Genres ist.

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