簡體   English   中英

為什么這個 SQL 查詢不起作用? CS50 Pset7 - 電影

[英]Why is this SQL query not working? CS50 Pset7 - movies

我目前正在通過這個https://cs50.harvard.edu/x/2020/psets/7/movies/並嘗試完成 9.sql。

有一個名為“電影”的數據庫,其中包含表:電影(列:id、標題、年份)、人物(id、姓名、出生)和明星(movie_id、person_id)。

任務是:

編寫一個 SQL 查詢來列出所有出演 2004 年上映的電影的人的名字,按出生年份排序。 它應該返回 18,013 個名字。

到目前為止,這就是我所做的:

SELECT count(distinct name) 
from people
join stars on stars.person_id = people.id
join movies on stars.movie_id = movies.id
WHERE year = 2004;

但是,這僅返回 17,965 的計數......

誰能看出為什么會這樣?

如果您count(distinct person_id) ,那么您將得到 18013。名稱不唯一是合理的。 不合理的是考試中的指令說你應該只列出姓名。

正確區分名稱的一種方法是執行以下操作:

SELECT p.name
from people p
where p.id in (
select distinct s.person_id
from stars s join movies m on s.movie_id = m.id
WHERE m.year = 2004)

如果你這樣做,那么由於in運算符的定義,你甚至不需要distinct 但無論如何,您可能會得到相同的執行計划。

在我看來,如果某個p.name屬於另一個人,則可以多次列出它。 如果規則以這些詞開頭,您編寫的查詢就可以了:

如果一個人的名字...

而不是這些詞:

如果一個人...

這讓我想起了CJ Date有一天在課堂上做的一件事。 他在他的投影儀上放了一張箔片,在牆上投射出一張煙斗的圖像。 他接着問:這是什么?

  • 一個管子,一個人說(可能是我)。
  • 另一個人說的管子的圖像。
  • 最后,有人說投影在牆上的管道圖像。

既然是數據庫課,不是物理課,誰也不敢當smart-a**。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM