mysql - 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
解决方案
您只能使用连接来执行此操作:
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
两次,然后过滤具有相同名字的不同参与者。
结果,您将获得具有相同姓氏并在同一部电影中扮演的演员的元组。不等式条件确保没有“镜像”记录(即每个元组在每部电影中只出现一次)。
推荐阅读
- javascript - 无法访问数组元素。将一个 ajax 请求的结果用于另一个 ajax 请求
- javascript - React Redux 状态数组变量作为道具传递给子组件,无限循环或空数组
- node.js - 是否在使用 IIS 托管在 Azure 中的 express.js 上运行的 node.js 应用程序?
- python - 在 python (jupyter lab) 中使用绘图作为对象?
- c - 我正在编写代码,在其中创建人,与他们结婚,让他们生育等,但我无法打印它们
- firebase - 自动将谷歌工作表同步到没有按钮的firebase
- php - 使用 FPDF 和 PHP 在同一个 PDF 中添加文本和图像?
- python - 在 python 中使用 cvxpy 包构建融合套索惩罚
- c# - Android 通知声音会导致媒体音量下降(较低)并且永远不会回来
- android - 导航控制器在 livedata 观察者中被调用两次