当前位置: 首页 > 面试题库 >

CS50 Pset 7 13.sql,我无法解决,嵌套了sqlite3数据库

陆敏学
2023-03-14
问题内容

数据库movie.db

directors (movie_id, person_id)

movies (id, title, year)

people (id, name, birth)

ratings (movie_id, rating, votes)

stars (movie_id, person_id)

您可以下载
数据库


问题

我是编程的新手,所以我决定首先从CS50哈佛课程开始,这里是问题和测试解决方案:

在13.sql中,编写一个SQL查询以列出曾在凯文·培根出演过的电影中出演过的所有人的名字。您的查询应该输出一个表格,其中每个人的名字都只有一列。数据库中可能有多个名为Kevin
Bacon的人。确保仅选择出生于1958年的凯文·培根。凯文·培根本人不应该包含在结果列表中。

解决方案提示

执行13.sql会导致表中有1列和176行。

在PowerShell或bash中执行代码 cat 13.sql | sqlite3 movies.db

我的代码:

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");

问题:

当我执行代码时,它停止工作,我无法与Kevin一起选择星星


问题答案:

获取自上而下的层次结构中的值,但请确保您在正确的域中进行搜索。获取所需的第一名称,但在取决于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


 类似资料:
  • 上面的代码,在 python3.10 下面没有问题 但是在 python3.11 上运行,就会报错

  • 问题内容: 我想了解嵌套列表的理解。下面,我列出了一个列表理解表达式及其for循环等效项。 我不知道我的理解是否正确。 例如, 相当于 如果可以概括一下,我猜 表格可以翻译为以下内容。(我希望我是对的) 对于更简单的情况, 等于 而, 等于 我问了一个类似的问题,即用于复杂列表理解 的循环表达式的等效项。那里给出的答案是在理解了表单内部的内容之后重构了表单。 我想知道它是如何系统地工作的,因此我可

  • 问题内容: 此JSON输出来自MongoDB聚合查询。我本质上需要将嵌套数据JSON解析为以下’ 和值。 我尝试了5种不同的技术来从中获得所需的信息,但是使用和模块却遇到了问题。 理想情况下,输出将是这样的: 问题答案: 注意:来自MongoDB的JSON响应实际上无效。JSON需要双引号(),而不是单引号()。 我不确定为什么您的响应中有单引号而不是双引号,但是从其外观上,您可以替换它们,然后只

  • 问题内容: 问题:为什么我不能打开数据库? 信息:我正在使用数据库进行项目。我编写了一个测试程序,该程序运行并传递数据库: 单元测试程序可以使之毫无问题。但是,当我实际使用将相同位置传递给它的程序时,出现以下错误: OperationalError:无法打开数据库文件 我试着用: 在三种情况下,我遇到了以上错误。最令人沮丧的部分是事实可以做到这一点,但实际程序却做不到。 关于到底发生了什么的任何线

  • 问题内容: 在Django中设置服务器时出现此错误。它是sqlite3,这意味着它应该创建.db文件,但似乎没有这样做。我已经将SQLite规定为后端,并且将其放置在绝对的文件路径中,但是没有运气。 这是错误还是我做错了什么?(只是在想,在Ubuntu中指定的绝对文件路径是否有所不同?) 这是我的settings.py文件的开头: 问题答案: 问题你正在使用SQLite3,你的DATABASE_N

  • 本文向大家介绍Android中ScrollView嵌套GridView的解决办法,包括了Android中ScrollView嵌套GridView的解决办法的使用技巧和注意事项,需要的朋友参考一下 前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全。 找到大家的通用解决办法。记录一下。 解