如何在MySQL中选择与交叉表中的一组id匹配的表的所有元素

时间:2012-01-31 15:39:01

标签: mysql select join

对于MySQL专家来说,这将是一个简单的。

我有一张包含歌曲(歌曲)的表格:

id, song_name

另一个带标签(标签):

id, tag_name

我有一个交联表(tagXsong):

id, song_id, tag_id

我需要一个单一的查询来返回所有歌曲(来自歌曲表),这些歌曲匹配标签列表中的所有标签(作为ID的连接列表提供,例如(57,58,60) ,63)。

换句话说,我想检索标签ID列表中包含所有标签的歌曲。

多么羞耻地要求这个!

1 个答案:

答案 0 :(得分:1)

SELECT s.id,s.song_name FROM song s, tagXsong x 
  WHERE s.id=x.song_id AND x.tag_id IN (57,58,60,63) 
  GROUP BY 1,2 HAVING COUNT(*)=4

这将为您提供所有与其链接的四个(57,58,60,63)tag_id的歌曲。