2012-11-17 60 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 –