查找正在播放“动作”类型的演员姓名的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章

什么是 SQL 查询来查找监督的员工比任何其他主管都多的员工的姓名?

用sql语句,查询每个班级成绩排名前三名的学生姓名

用sql语句,查询每个班级成绩排名前三名的学生姓名

sql查询查找至少有2种帐户的用户

如何分解表以获得最佳查询

sql查找数据并计算平均值