【发布时间】:2019-10-19 21:30:40
【问题描述】:
我有一个包含三个表的电影数据库。电影参与、人物和电影角色
我的问题是,我必须找到在 200 多部电影中扮演独特角色的每位演员。
一个独特的角色,是一个在电影角色表中只出现一次的角色。
我认为我通过以下查询找到了唯一字符表
SELECT filmcharacter.partid FROM filmcharacter GROUP BY
filmcharacter.partid HAVING count(*) = 1;
我将其重写为 WITH 语句,形式为
WITH unique_table(partid) AS (SELECT partid FROM filmcharacter GROUP
BY partid HAVING count(*) = 1)
但是我不确定如何进一步解决这个问题。我打算使用 WITH 来创建一个包含我需要的数据的表,然后选择我想要的行,将它们与相关的东西连接起来。
WITH unique_table(partid) AS (SELECT partid FROM filmcharacter
INNER
JOIN filmparticipation ON(filmcharacter.partid =
filmparticipation.partid) INNER JOIN person(person.personid =
filmparticipation.personid) GROUP
BY partid)
我不知道接下来我尝试过如何继续
WITH unique_table(partid) AS (SELECT partid FROM filmcharacter
INNER
JOIN filmparticipation ON(filmcharacter.partid =
filmparticipation.partid) INNER JOIN person(person.personid =
filmparticipation.personid) GROUP
BY partid) SELECT * FROM unique_table GROUP BY partid HAVING
count(partid) > 200;
但如果发送它,我会得到查询零表。
这些表有以下键:
Filmparticipation(personid, partid)
Filmcharacter(partid)
Person(personid)
我期望得到的是类似于表格的东西。它有一个标识演员(personid)的 ID,以及他们作为唯一角色出现的次数
Actor Count
----------|----------
1 201
2 309
【问题讨论】:
-
当你得到一个你不期望/不理解的结果时,停止试图找到你的总体目标并找出你的误解是什么。--隔离第一个意外/误解的子表达式及其输入 &输出并了解是什么误解、错字、错误推理等导致了它。然后编写一个新的整体查询。 (调试基础。)