1

我试图获取属于两种类型(类别)的所有电影名称,

即架构

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。

这让我回到零结果,当我知道使用我的测试数据应该是三个结果时,我是否做错了查询。

4

2 回答 2

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
于 2012-11-17T15:51:46.907 回答
0

Tags.genre不能同时是“喜剧”和“动作。您需要IN这样的子句:

`SELECT fields FROM tables WHERE tags.genre IN ('Comedy', 'Action')

于 2012-11-17T15:52:22.820 回答