SQL查询咨询:如何获取同时出演两部指定影片的演员
如何查询同时出演两部影片的演员
你第一条SQL里用WHERE F.title = 'RANDOM GO' AND F.title ='JASON TRAP'查不到结果,核心原因是单条记录里的电影标题只能是一个值,不可能同时等于两个不同的片名,这个条件永远匹配不到数据。
下面给你几个可行的解决方案:
方案1:分组统计(GROUP BY + HAVING)
先筛选出两部影片的参演记录,再按演员分组,统计每个演员出演目标影片的数量,只保留数量为2的演员(说明同时出演了两部)。
SELECT A.first_name, A.last_name FROM actor AS A JOIN film_actor AS Fa ON A.actor_id = Fa.actor_id JOIN film AS F ON F.film_id = Fa.film_id WHERE F.title IN ('RANDOM GO', 'JASON TRAP') GROUP BY A.actor_id, A.first_name, A.last_name HAVING COUNT(DISTINCT F.film_id) = 2;
加DISTINCT是为了避免同一演员在同一部影片中有多条重复记录的情况,让统计更严谨。
方案2:多次JOIN关联
通过两次关联操作,分别匹配两部影片的参演记录,直接筛选出同时出现在两个关联结果里的演员。
SELECT A.first_name, A.last_name FROM actor AS A JOIN film_actor AS Fa1 ON A.actor_id = Fa1.actor_id JOIN film AS F1 ON F1.film_id = Fa1.film_id AND F1.title = 'RANDOM GO' JOIN film_actor AS Fa2 ON A.actor_id = Fa2.actor_id JOIN film AS F2 ON F2.film_id = Fa2.film_id AND F2.title = 'JASON TRAP';
这种方式逻辑直白,每一步JOIN都限定了对应的影片,确保演员同时参演了两部。
方案3:子查询取交集
先分别查询出两部影片的演员ID集合,再筛选同时存在于两个集合中的演员信息。
SELECT first_name, last_name FROM actor WHERE actor_id IN ( SELECT actor_id FROM film_actor JOIN film ON film.film_id = film_actor.film_id WHERE title = 'RANDOM GO' ) AND actor_id IN ( SELECT actor_id FROM film_actor JOIN film ON film.film_id = film_actor.film_id WHERE title = 'JASON TRAP' );
内容的提问来源于stack exchange,提问作者Tuta.Tibetan
相关产品推荐
相关产品推荐

