数据库 movie.db
tables
导演(movie_id、person_id)
电影(id、标题、年份)
人(身份证、姓名、出生)
评分(movie_id、评分、投票)
明星(movie_id、person_id)
你可以下载database.
Question
我是编程新手,所以我决定,首先,CS50 哈佛课程就是问题和测试solution:
在 13.sql 中,编写一个 SQL 查询来列出主演凯文·培根也主演的电影的所有人员的姓名。
您的查询应该输出一个表,其中每个人的姓名有一列。
数据库中可能有多个名为凯文·培根的人。一定要只选择1958年出生的凯文·培根。
凯文·培根本人不应包含在最终的名单中。
解决方案提示
执行 13.sql 会生成一个包含 1 列和 176 行的表。
在 PowerShell 或 bash 中执行代码cat 13.sql | sqlite3 movies.db
My Code:
SELECT COUNT(name)
FROM people
JOIN stars ON stars.person_id = people.id
JOIN movies ON movies.id = stars.movie_id
WHERE people.id IN(
SELECT stars.person_id
FROM stars
GROUP BY stars.person_id
HAVING name = "Kevin Bacon");
problem:
当我执行代码时它停止工作,我无法与凯文一起选择星星
获取自上而下层次结构中的值,但确保您在正确的域中搜索它。获取第一个需要的名称,但在正确的域中搜索它,该域依赖于 person_id,进而依赖于 movie_id。最后,为了调用条件,我们必须调用 people.id,因为条件依赖于 people 表中的数据。在每一步中执行所需的 JOIN 至关重要。
要从结果中删除 Kevin Bacon,您可以使用 EXCEPT 关键字并在其他查询中专门选择他。
SELECT name FROM people WHERE people.id
IN
( SELECT person_id FROM stars JOIN movies ON movies.id = stars.movie_id
WHERE movie_id IN
( SELECT movie_id FROM movies JOIN stars ON stars.movie_id = movies.id JOIN people ON
people.id = stars.person_id WHERE people.id IN (
SELECT id FROM people WHERE people.name = "Kevin Bacon" AND people.birth = 1958 )))
EXCEPT
SELECT name FROM people WHERE people.name = "Kevin Bacon" AND people.birth = 1958
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)