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"类型的电影.当我运行这个查询时,我会看到喜剧和其他性别的电影,但我想排除其他性别,只得到只有喜剧和恐怖的电影.有什么建议吗?
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)
虽然我很确定有更有效的方法来做到这一点......