2016-04-05 48 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稍有不同,但是這個效果很好。非常感謝你。 –