sql查找具有特定类型的电影

Joh*_*ith 0 sql postgresql

select 
  film.title
from film
  left outer join filmitem ON film.filmid = filmitem.filmid
  left outer join filmgenre ON filmitem.filmid = filmgenre.filmid
where
  film.title = title and filmgenre.genre NOT IN (
    select genre from genre
    where genre != 'Comedy' and genre != 'Horror')
group by title;
Run Code Online (Sandbox Code Playgroud)

我想找到只包含"Comedy"和"Horror"类型的电影.当我运行这个查询时,我会看到喜剧和其他性别的电影,但我想排除其他性别,只得到只有喜剧和恐怖的电影.有什么建议吗?

Ser*_*sev 5

select 
  film.title
from film
  left outer join filmitem ON film.filmid = filmitem.filmid
  left outer join filmgenre ON filmitem.filmid = filmgenre.filmid
where
  film.title = title and filmgenre.genre IN ('Comedy', 'Horror')
group by title;
Run Code Online (Sandbox Code Playgroud)

UPD:唉,对不起,第二次读你的问题.将在一分钟内更新查询...

UPD2:如果你需要选择只有'喜剧'和'恐怖'两种类型的电影,你可以使用

select 
  film.title
from film
  left outer join filmitem ON film.filmid = filmitem.filmid
where
  film.title = title
  AND EXISTS (SELECT * FROM filmgenre fg WHERE filmitem.filmid = fg.filmid AND fg.genre='Comedy')
  AND EXISTS (SELECT * FROM filmgenre fg WHERE filmitem.filmid = fg.filmid AND fg.genre='Horror')
  AND NOT EXISTS (SELECT * FROM filmgenre fg WHERE filmitem.filmid = fg.filmid AND fg.genre NOT IN ('Comedy','Horror'))
group by title;
Run Code Online (Sandbox Code Playgroud)

虽然我很确定有更有效的方法来做到这一点......