查找正在播放“动作”类型的演员姓名的 SQL 查询
Posted
技术标签:
【中文标题】查找正在播放“动作”类型的演员姓名的 SQL 查询【英文标题】:SQL query that finds the names of the actors who are playing in "Action" genre 【发布时间】:2016-01-20 08:36:46 【问题描述】:我在攻读学位期间正在上一门 SQL 小课程,我对这种材料非常陌生。
给定管理电影数据的网站“eMovies”数据库。
编写 SQL 查询,查找正在播放“动作”类型的演员的姓名,而约翰尼·德普没有出演的是那些电影。
表格:
Actors
ActorID PK
Firstname
LastName
Directors
DirectorID PK
Firstname
LastName
Genres
GenreID PK
GenreDescr
Movies
MovieID PK
MovieName
Year
ActorsMovies
MovieID PK
ActorID PK
DirectorsMovies
MovieID PK
DirectorID PK
GenresMovies
MovieID PK
GenreID PK
我的尝试:
SELECT Actors.FirstName,Actors.LastName
FROM Actors
INNER JOIN ActorsMovies ON Actors.ActorID= ActorsMovies.ActorID
INNER JOIN GenresMovies ON ActorsMovies.MovieID=GenresMovies.MovieID
GROUP BY GenreID
HAVING GenreID='201' AND NOT IN Actors.ActorID='301855124' ;
【问题讨论】:
一般 GROUP BY 规则:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。”此外,HAVING 子句适用于聚合函数条件。 【参考方案1】:你试过了吗?
SELECT Actors.FirstName,Actors.LastName
FROM Actors
INNER JOIN ActorsMovies ON Actors.ActorID= ActorsMovies.ActorID
INNER JOIN GenresMovies ON ActorsMovies.MovieID=GenresMovies.MovieID
WHERE GenreID='201' AND Actors.ActorID<>'301855124' ;
【讨论】:
【参考方案2】:SELECT Actors.FirstName,Actors.LastName
FROM Actors
INNER JOIN ActorsMovies t ON Actors.ActorID= t.ActorID
INNER JOIN GenresMovies ON t.MovieID=GenresMovies.MovieID
WHERE GenresMovies.GenreID = 201 and
not exists (select b.movieid from actorsmovies b where b.ActorID=301855124 and b.movieid = t.movieid) ;
此查询使用 NOT EXISTS 函数检查每个回答您的请求的演员,即约翰尼·德普没有在该电影中播放
【讨论】:
以上是关于查找正在播放“动作”类型的演员姓名的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章