2012-01-31 38 views
0

這對於MySQL專家來說是簡單的。如何選擇與MySQL中交叉表中的一組ID相匹配的表中的所有元素

我有歌曲(歌曲)一個表:

id, song_name 

和另一個標籤(標籤):

id, tag_name 

,我有一個交聯表(tagXsong):

id, song_id, tag_id 

我需要一個單一的查詢,返回所有的歌曲(從歌曲表),其中匹配標籤列表內的所有標籤(作爲ID的連接列表提供,例如(57,58,60,63))。

換句話說,我想檢索具有標籤ID列表中所有標籤的歌曲。

這真是太遺憾了!

+0

請注意:ID列表以字符串形式提供。我通常使用查詢,如SELECT * FROM tagXsong WHERE tag_id IN(57,58,60,63) – SquareCat 2012-01-31 15:43:26

+0

請參閱此問題和答案,許多不同的方法來實現您所尋求的,與基準:[如何過濾SQL結果在有很多通過關係](http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a-has-many-through-relation) – 2012-01-31 15:58:39

回答

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鏈接到他們的歌曲。

+0

就是這樣!哇,我從來沒有到過那裏自己:)謝謝!其中一個問題 - GROUP業務是什麼,爲什麼與COUNT(*)的比較是? – SquareCat 2012-01-31 15:56:51

+0

@ user1018787我使用分組捆綁歌曲,因爲它們會以單獨一行顯示。做完這些之後,我只選擇計數爲4的那些行(表示所有標籤都存在)。我希望這解釋得更好一點。 – dgw 2012-01-31 16:00:44

+0

在閱讀你的解釋並嘗試沒有分組的查詢後,我想我明白了!謝謝! – SquareCat 2012-01-31 16:04:45

相關問題