sql - 最多一个查询 SQL
问题描述
我正在用基本的 SQL 做一些练习,但遇到以下问题:
让我们考虑以下关于演员和电影的关系模式:
- 电影: FilmCode 、标题、电影制作人、年份
- 演员: ActorCode,姓,名,性别,出生日期,国籍
- 解读:电影、演员、角色
让我们假设不止一个演员可能在一部电影中表演,并且同一演员可能在不止一部电影中表演,并且在给定的电影中,每个参与的演员只扮演一个角色。
电影制片人必须通过他/她的姓氏来明确识别,每部电影都由一位电影制片人执导。
我必须写的查询是:
最多在电影制片人昆汀·塔伦蒂诺执导的一部电影中一起表演的演员。
如何将“最多一部电影”翻译成 SQL 语言?
到目前为止我写的是:
SELECT DISTINCT A1.ActorCode, A2.ActorCode
FROM Actor A1 A2, Interpretation I1 I2
WHERE I1.Film=I2.Film and I1.Actor <> I2.Actor and A1.ActorCode= I1.Actor and A2.ActorCode=I2.ActorCode and exists unique (
Select *
From Film F
Where I1.Film=F.FilmCode and F.Filmmaker=’Tarantino’
)
但这不是重点
解决方案
SELECT
I.Actor, I2.Actor
FROM Interpretation I
INNER JOIN FIlm F
ON F.Filmmaker=’Tarantino’
and F.FilmCode = I.Film
INNER JOIN Interpretation I2
ON I.Film = I2.Film
and I2.Actor <> I.Actor
and I2.Actor not in (SELECT Actor
FROM Interpretation I3
INNER JOIN FIlm F1
ON F1.Filmmaker=’Tarantino’
and F1.FilmCode = I3.Film
and F1.FilmCode <> I.Film #All other tarantino films
WHERE I3.Actor = I.Actor)
推荐阅读
- javascript - Mapbox单击多边形不会产生弹出框
- multithreading - 用于 CPU 密集型应用程序的多线程与多进程设计方法
- flutter - 如何将物品堆叠在一起?
- bootstrap-modal - 如何使用 jQuery 打开 Bootstrap 模式?
- node.js - 打字稿语法相关
- python - 你如何从文本文件python中删除数字最大的行?
- computer-vision - 大图像上的风格转移。(成块?)
- laravel - Laravel Vue.js - 服务器重新启动后,帐户不会注销
- javascript - Web 组件中自定义元素的构造函数限制
- postgresql-9.1 - PostgreSQL 触发器中的唯一约束冲突