2012-11-17 32 views
1

我试着去获得所有两种类型(categroies)所属的movies_name,选择两个匹配外部ID的行?

即SCHEMA

movie_id genre 
4   Action 
4   Comedy 

SQL:

SELECT movies.movie_name 
FROM movies 
INNER JOIN tags 
ON movies.movie_id = tags.movie_id 
WHERE tags.genre = 'Comedy' 
AND tags.genre = 'Action' 

这应该给我带回movie_id 4 MOVIE_NAME

这给我带来了零结果,当我知道他应该是三个结果使用我的测试数据,我在做错误的查询。

+0

你必须使用一个OR或在声明 – silly

回答

4
SELECT movies.movie_name 
FROM movies 
INNER JOIN tags 
ON movies.movie_id = tags.movie_id 
WHERE tags.genre IN ('Comedy','Action') 
GROUP BY movies.movie_name 
HAVING COUNT(*) = 2 

如果没有流派指定的唯一限制是每部电影,那么你需要添加DISTINCT

SELECT movies.movie_name 
FROM movies 
INNER JOIN tags 
ON movies.movie_id = tags.movie_id 
WHERE tags.genre IN ('Comedy','Action') 
GROUP BY movies.movie_name 
HAVING COUNT(DISTINCT tags.genre) = 2 
+0

感谢这样的作品,将当他们让我回答时,马上回答你的答案+1)+1 – unknown

+1

我已经去了一个双连接,但是这个更干净。 +1。 –

+0

你可以向我解释最后一行'HAVING COUNT(*)= 2' – unknown

0

Tags.genre不能同时为 '喜剧' 和“行动'在同一时间。你需要一个IN条款像这样:

'从表中选择字段WHERE tags.genre IN(“喜剧”,“行动”)

+0

如果它至少有一个类型在'IN'子句中,它仍然会返回电影。 –

+0

请看这里http://sqlfiddle.com/#!2/960fd/10 –