首页 > 解决方案 > SQL:选择属于所有指定类型的所有电影

问题描述

我有下表称为电影:

id     |    title                                        |    year
308       Coraline                                            2009
125       Harry Potter and the Prisoner of Azkaban            2004
204       Hugo                                                2011

和表格类型:

movie_id      |    genre
308                Fantasy
308                Thriller
125                Fantasy
125                Mystery
204                Fantasy 
204                Mystery
204                Drama 

其中movie_id 是引用电影表中属性id 的外键。我正在尝试获取属于幻想和神秘类型的所有电影(即输出电影应该是哈利波特和雨果)。

我有以下查询:

SELECT title, year 
FROM Movies, Genre 
WHERE Movies.id=Genre.movie_id AND genre = 'Fantasy' AND genre = 'Mystery';

但是,我没有从这个查询中得到任何输出,我不知道为什么。任何见解都值得赞赏。

标签: mysqlsql

解决方案


您可以进行聚合和使用having

SELECT m.id, m.title
FROM Movies m INNER JOIN
     Genre g
     ON g.movie_id = m.id
WHERE g.genre IN ('Fantasy', 'Mystery')
GROUP BY m.id, m.title
HAVING COUNT(distinct g.genre) = 2; -- Count of where clause

推荐阅读