2017-02-11 15 views
1

我不能制定下列查詢來挽救我的生命:如何找到人蔘加的所有電影

誰參加了所有的電影,這電影是在所有電影院放映,其中電影院顯示所有電影?

考慮以下關係:

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關鍵字,或者如果沒有它可以完成。

+2

有什麼疑問?這可能有幫助。 –

+0

就是這樣,我不能制定他們,我只能問他們: 誰參與了所有電影?所有電影院都放映了哪部電影?哪些電影院顯示所有電影? – BadMan

+0

啊....好的,讓我建議編輯。 –

回答

0

誰參加過電影?

select person_id,count(*) as c 
from participation 
group by person_id 
having c = (select count(*) from film) 

因爲它是相同的程序,您應該可以現在休息一下。

我做了一些小提琴來試試吧:sqlfiddle

+0

謝謝sqlfiddle鏈接!我不知道這樣的資源存在! – BadMan

0

如何找到參與所有影片

一種方法是計數的人,每個人,許多此人蔘與的電影,然後與電影總數相比較

SELECT person_id 
FROM participation 
GROUP BY person_id 
HAVING count(distinct film_id) = (
      SELECT count(*) FROM film 
) 
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) 

子查詢發現該人蔘與的所有電影,並採取了所有電影的區別。如果該人蔘與全部,那麼結果將是空集。外部查詢通過檢查子查詢返回空集來查找人蔘與所有電影。

該模式可用於回答其他查詢。

+0

謝謝曼紐爾,這更像是我的同學所說的,你能解釋一下不存在的原因以及它爲什麼起作用嗎? 對於「哪部電影在所有電影院中顯示」這樣的問題,我得到了類似這樣的內容: SELECT:title FROM:film WHERE:not exists(SELECT:* FROM:cinema WHERE not exists(SELECT:* FROM:show在哪裏:cinema.ID =電影AND film.ID =電影) – BadMan

相關問題