2011-09-14 35 views
1

所以我有一個「流派」表,它有重複的流派和ID,我想制定一個查詢,以便返回所有具有這兩種流派的行ID。MySQL - 一個表,多行重複ID

例如,

+---------+-------+ 
| genre | movie | 
+---------+-------+ 
| Musical | 558 | 
| Musical | 562 | 
| Musical | 597 | 
| Musical | 651 | 
| Musical | 656 | 
| Musical | 791 | 
| Musical | 810 | 
| Musical | 845 | 
| Musical | 859 | 
| Musical | 919 | 
| Musical | 949 | 
| Musical | 971 | 
+---------+-------+ 
12 rows in set (0.00 sec) 

+--------+-------+ 
| genre | movie | 
+--------+-------+ 
| Comedy | 642 | 
| Comedy | 643 | 
| Comedy | 644 | 
| Comedy | 651 | 
| Comedy | 654 | 
| Comedy | 658 | 
+--------+-------+ 
6 rows in set (0.00 sec) 

我希望它返回「電影651」,因爲它無論是在喜劇和音樂劇(假設兩個「喜劇」的查詢和'音樂')。

+2

我們似乎得到這每天提問。嘗試http://stackoverflow.com/questions/7407001/mysql-select-from-associative-table/7407063#7407063? – Konerak

回答

0

這會給你的ID列表中都

select movie from table a join table b on a.movie = b.movie 
4

使用

SELECT DISTINCT A.MOVIE FROM GENRES A, GENRES B WHERE A.MOVIE = B.MOVIE AND A.GENRE = 'Comedy' AND B.GENRE = 'Musical'; 

編輯 - 按評論:

SELECT DISTINCT A.MOVIE 
FROM 
    GENRES A 
    INNER JOIN 
    GENRES B 
     ON A.MOVIE = B.MOVIE 
WHERE A.GENRE = 'Comedy' 
    AND B.GENRE = 'Musical'; 
+0

輕微調整SELECT a.movi​​e FROM流派a,流派b其中a.movi​​e = b.movi​​e和a.genre ='喜劇'AND b.genre ='Musical'; – JDelonge

+0

已更新...請不要忘記將upvote/mark標記爲已接受任何有幫助的答案... – Yahia

+0

爲什麼downvote?如果有什麼要改進的話:一個解釋會很好... – Yahia

1
SELECT DISTINCT 
    movie 
FROM 
    genres 
WHERE 
    movie in (SELECT movie from genres where genre = "Musical") 
    AND movie in (SELECT movie from genres where genre = "Comedy") 
+2

這給了我工會,而不是交集 – JDelonge

+0

哦,那是真的。我現在編輯它。 – v42