2011-09-14 38 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