Sin*_*sta 2 mysql sql sqlite oracle relational-division
我有以下表格:
MOVIE_ID 标题
---------- -----------------------------
1 肖申克的救赎
2 教父
3 教父:第二部分
4 黑暗骑士
5 低俗小说
6 善、恶、丑
7 辛德勒的名单
8 愤怒的人
9 搏击俱乐部
10 起始
11 阿甘正传
DIRECTOR_ID 名称
----------- -------------------------
1 蒂姆·罗宾斯
2 摩根·弗里曼
3 马龙·白兰度
4 阿尔·帕基诺
5 罗伯特·德尼罗
6 克里斯蒂安·贝尔
7 希斯·莱杰
8 约翰·特拉沃拉
9 乌玛·瑟曼
10 克林特·伊斯特伍德
11 伊莱·瓦拉赫
MOVIE_ID DIRECTOR_ID
---------- -----------
1 1
1 2
2 3
2 4
3 4
3 5
4 6
4 7
5 8
5 9
6 10
我想要一个返回以导演 x、y 和 z 作为导演的所有电影的查询:
例子:
如果我寻找一部由阿尔·帕基诺和克林特·伊斯特伍德主演的电影,它应该不会返回任何内容,因为我没有一部由他们两人担任导演的电影。
然而,如果我要找一部蒂姆·罗宾斯和摩根·弗里曼主演的电影,应该会是《肖申克的救赎》
如果使用上述设计无法完成,请提出替代方案。
我已经尝试过,但我的查询将返回结果:(
SELECT m.title FROM Movie m
WHERE m.movie_id IN (
SELECT d.movie_id FROM Direct d
WHERE d.director_id IN (
SELECT director_id FROM Director dir
WHERE name IN('Clint Eastwood', 'Al Pachino')));
Run Code Online (Sandbox Code Playgroud)
这是实现这一目标的一种方法,即对导演进行分组、过滤然后计数:
SELECT m.title
FROM Movie m
INNER JOIN Direct md
on md.movie_id = m.movie_id
INNER JOIN Directors d
on md.director_id = d.director_id
WHERE
d.name IN('Clint Eastwood', 'Al Pachino')
GROUP BY m.title
HAVING COUNT(DISTINCT d.director_id) = 2;
Run Code Online (Sandbox Code Playgroud)
{出于兴趣,这些不是电影里的演员吗?}
| 归档时间: |
|
| 查看次数: |
8724 次 |
| 最近记录: |