如何找到参与所有电影的人

时间:2017-02-11 11:20:01

标签: mysql sql relational-division

我无法制定以下查询以挽救我的生命:

谁参与了所有电影,哪部电影放映在所有电影院,电影院都放映所有电影?

鉴于以下关系:

film: [ID, title, year, genre]
person: [ID, name, firstname]
cinema: [ID, name, city]
participation: [film, person, function ('actor', or 'director')]
show: [film, date, cinema]

电影,人物和电影是ParticipationShow中的外键。

我也不确定是否需要ALL关键字,或者是否可以不使用它。

3 个答案:

答案 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)

子查询会查找此人参与的所有电影,并对所有电影产生影响。如果该人参与所有,则结果将是空集。外部查询通过检查子查询返回空集来查找人参与所有电影。

该模式可用于回答其他查询。