Sakila数据库SQL查询:找出参演全部16类影片的演员
解决Sakila数据库查找参演全类别演员的问题
不需要编写FUNCTION或PROCEDURE,用普通SQL查询就能实现需求。核心思路是统计每个演员参演的不同影片类别数量,筛选出数量等于总类别数(16个)的演员即可。
完整查询语句
SELECT a.actor_id, a.first_name, a.last_name FROM actor a INNER JOIN film_actor fa ON fa.actor_id = a.actor_id INNER JOIN film_category fc ON fc.film_id = fa.film_id GROUP BY a.actor_id, a.first_name, a.last_name HAVING COUNT(DISTINCT fc.category_id) = 16;
关键步骤解释
- 分组:按
actor_id(及姓名,因actor_id唯一可确保姓名唯一)分组,聚焦单个演员的所有参演记录。 - 去重统计类别数:用
COUNT(DISTINCT fc.category_id)统计演员参演的不同类别数量——避免同一演员因参演同类别多部电影导致重复计数。 - 筛选全类别演员:通过
HAVING子句过滤出类别数等于16的演员,确保他们覆盖了所有影片类别。
可选优化(动态获取总类别数)
如果不确定类别总数,可通过子查询动态获取,避免硬编码数字:
SELECT a.actor_id, a.first_name, a.last_name FROM actor a INNER JOIN film_actor fa ON fa.actor_id = a.actor_id INNER JOIN film_category fc ON fc.film_id = fa.film_id GROUP BY a.actor_id, a.first_name, a.last_name HAVING COUNT(DISTINCT fc.category_id) = (SELECT COUNT(*) FROM category);
内容的提问来源于stack exchange,提问作者user2518312
相关产品推荐
相关产品推荐

