我正在尝试构造一个MySQL查询,该查询将允许我在具有流行和电子流派的数据库中提取曲目的歌曲标题。
+----------------------------------------------------+ TABLE: SONG +----------------------------------------------------+ song_id | title | 1 | song name | +----------------------------------------------------+ TABLE: GENRE +----------------------------------------------------+ genre_id | name | 1 | Pop | 2 | Electronic | +----------------------------------------------------+ TABLE: SONG_GENRE +----------------------------------------------------+ genre_id | song_id | 1 | 1 | 2 | 1 |
该SQL不起作用,因为它显然永远不会返回genre_id 1和2,但这就是我遇到的问题。
SELECT DISTINCT song.song_id, song.title FROM song LEFT JOIN song_genre ON song_genre.song_id = song.song_id LEFT JOIN genre ON genre.genre_id = song_genre.genre_id WHERE genre.genre_id ='1' AND genre.genre_id='2'
如果有人能指出我正确的方向,那我将非常感激!
这是一种实现方法:
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
另一种可能更有效的方式。假设song_genre中没有dups。COUNT(*)= X,其中X等于列出的类型。
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