作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
老实说,这是一个家庭作业问题,但我已经浪费了好几个小时,而且无法正确解决。它返回错误数量的结果或错误的数据:
我需要选择参与指导电影和/或在电影中表演的每个人以及他们所做的次数,如果至少 5 次。
有一个acts
带有 movie_id
的表和 person_id
, directs
与 movie_id
和 person_id
和 person
( pid
和 name
)。
我想出的是:
SELECT p.name,count(d.mid)+count(a.mid)
FROM person p
INNER JOIN acts a
ON a.pid=p.pid
LEFT JOIN directs d
ON p.pid=d.pid
group by p.pid,p.name
having (count(d.mid) +count(a.mid))>=5
person
和
directs
与
person_id
匹配的表在两个表中,同时对
directs
执行相同操作.问题是第二个查询的结果不包括在内(有 10 部电影的 Alfred Hitchcock 从一开始就一直困扰着我)。
最佳答案
就这个问题而言, Actor 和导演之间没有相关的区别,都是当事人。
所以让我们create a view这隐藏了相关人员存储在两个表中的事实:
CREATE VIEW involved AS
SELECT mid, pid, 'actor' AS role FROM acts
UNION ALL
SELECT mid, pid, 'director' AS role FROM directs
person
的简单连接来解决问题。 . (
role
列实际上并不需要。)
role
字段和使用
UNION
而不是
UNION ALL
,这将仅计为一次参与。但把它算作两个对我来说更有意义。
关于参与 A OR B 的 SQLite 人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761751/
我是一名优秀的程序员,十分优秀!