2016-04-05 42 views
0

所以,我有3代表的有关列的数据库:Mysql的电影/标签选择查询

  1. 标签:TID,TAG_NAME
  2. 电影:MID,MOVIE_TITLE
  3. tags_to_movies:movie_ID,TAG_ID

如何选择至少具有我想要的标签的电影。所以,如果我有一个movie1与标签(1,2,3)和movie2与(1,4)当我选择TID 1我得到movie1和movie2作为结果,但是当我查询TID( 1,2)我只得到movie1。

我环顾了一下网络,我觉得我找不到解决方案(或者没有足够努力)。

+0

可能是因为你的where子句是和tid = 1和tid = 2,这只会影响电影1.尝试从movie m,tags t,tags_to_movies c中选择movie_title,其中m.mid = c.movi​​e_id和c.tag_id in (我在这里的选择列表 - 像“(1,2)中的c.tag_id”) –

回答

0
select m.MID, m.movie_title 
from movies m 
join tags_to_movies tm on tm.movie_id = m.mid 
join tags t on tm.tag_id = t.tid 
where t.tid in (1,4) 
group by m.MID, m.movie_title 
having count(distinct t.tid) = 2 

having count(distinct t.tid) = 2取决于您拥有的标签数量。对于3个标签使用having count(distinct t.tid) = 3

+0

我使用GROUP BY和HAVING稍有不同,但是这个效果很好。非常感谢你。 –