[英]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.