首页 > 解决方案 > SQL查找相似之处

问题描述

“确定是否有同名演员出现在同一部电影中。”

这是我的任务,我应该用子查询来做,我真的不知道还能做什么。我尝试了分组、排序和计数的所有方法,但我只是没有达到在同一部电影中获得相同名字的演员的地步。

也许有人可以帮助我?我正在使用 Sakila 数据库

    SELECT 
a.first_name
,(a.last_name)
,a.actor_id
, f.title
FROM actor a 

JOIN film_actor fa ON fa.actor_id = a.actor_id
JOIN film f ON f.film_id = fa.film_id

JOIN(SELECT b.first_name, COUNT(*)
     FROM actor B
     GROUP BY b.first_name
     HAVING COUNT(*) > 1 ) b 
     ON a.first_name = b.first_name
     
     GROUP BY a.last_name
     HAVING COUNT(f.title) > 1
     
     
     
     ORDER BY a.first_name

标签: mysqlsqlcountinner-join

解决方案


您只能使用连接来执行此操作:

select f.title, a1.first_name, a1.last_name as last_name_1, a2.last_name as last_name_2
from film f
inner join film_actor fa1 on fa1.film_id = f.film_id
inner join film_actor fa2 on fa2.film_id = f.film_id
inner join actor a1 on a1.actor_id = fa.actor_id
inner join actor a2 on a2.actor_id = fa.actor_id
where a1.first_name = a2.first_name and a1.actor_id < a2.actor_id

film表开始,这遵循关系到actor通过film_actor两次,然后过滤具有相同名字的不同参与者。

结果,您将获得具有相同姓氏并在同一部电影中扮演的演员的元组。不等式条件确保没有“镜像”记录(即每个元组在每部电影中只出现一次)。


推荐阅读