我无法制定以下查询以挽救我的生命:
谁参与了所有电影,哪部电影放映在所有电影院,电影院都放映所有电影?
鉴于以下关系:
film: [ID, title, year, genre]
person: [ID, name, firstname]
cinema: [ID, name, city]
participation: [film, person, function ('actor', or 'director')]
show: [film, date, cinema]
电影,人物和电影是Participation
和Show
中的外键。
我也不确定是否需要ALL关键字,或者是否可以不使用它。
答案 0 :(得分:0)
select person_id,count(*) as c
from participation
group by person_id
having c = (select count(*) from film)
你应该可以现在休息,因为它是相同的程序。
我做了一个小小的尝试:sqlfiddle
答案 1 :(得分:0)
如何找到参与所有电影的人
一种方法是为每个人计算这个人参与的一些电影,然后与电影总数进行比较
SELECT person_id
FROM participation
GROUP BY person_id
HAVING count( distinct film_id ) = (
SELECT count(*) FROM film
)
答案 2 :(得分:0)
这些可以通过子查询来解决:
1)谁参与了所有电影
Select ID
From person as P1
where not exists
(select distinct id
from film
difference
select distinct film_id
from participation as P2
where P2.person_Id = P1.Id)
子查询会查找此人参与的所有电影,并对所有电影产生影响。如果该人参与所有,则结果将是空集。外部查询通过检查子查询返回空集来查找人参与所有电影。
该模式可用于回答其他查询。