Đây là một cách để làm điều đó:
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
Một cách khác có thể hiệu quả hơn. Điều này giả định rằng không có lỗi nào trong song_genre. COUNT (*) =X trong đó X bằng số thể loại được liệt kê.
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