【问题标题】:Where am I going wrong in my cs50 pset 7 10.sql nested query?我的 cs50 pset 7 10.sql 嵌套查询哪里出错了?
【发布时间】:2021-01-25 08:31:47
【问题描述】:

我目前正在尝试查找所有导演过评分至少为 9.0 的电影的人的姓名 这些表的方案是

CREATE TABLE movies (

                    id INTEGER,
                    title TEXT NOT NULL,
                    year NUMERIC,
                    PRIMARY KEY(id)
                );
CREATE TABLE stars (

                movie_id INTEGER NOT NULL,
                person_id INTEGER NOT NULL,
                FOREIGN KEY(movie_id) REFERENCES movies(id),
                FOREIGN KEY(person_id) REFERENCES people(id)
            );
CREATE TABLE directors (

                movie_id INTEGER NOT NULL,
                person_id INTEGER NOT NULL,
                FOREIGN KEY(movie_id) REFERENCES movies(id),
                FOREIGN KEY(person_id) REFERENCES people(id)
            );
CREATE TABLE ratings (

                movie_id INTEGER NOT NULL,
                rating REAL NOT NULL,
                votes INTEGER NOT NULL,
                FOREIGN KEY(movie_id) REFERENCES movies(id)
            );
CREATE TABLE people (

                id INTEGER,
                name TEXT NOT NULL,
                birth NUMERIC,
                PRIMARY KEY(id)
            );

我的 SQL 查询是:

SELECT DISTINCT name FROM people 
WHERE id IN ( SELECT person_id FROM directors WHERE movie_id IN ( 
    SELECT id FROM movies WHERE id IN (
        SELECT movie_id FROM ratings WHERE votes >= 9.0)));

但是,这未通过 check50 测试,并给出不正确的输出。谁能帮我解决我哪里出错了?

【问题讨论】:

  • DISTINCT 不是一个函数,它是SELECT DISTINCT 的一部分 - 并且适用于整个选定的行。去掉那些多余的括号,直接写SELECT DISTINCT name FROM ... 让代码更清晰。

标签: sql sqlite cs50


【解决方案1】:

规范说(强调)

10.sql 中,编写一个 SQL 查询来列出所有导演过评分至少为 9.0 的电影的人的姓名。

查询未过滤ratings.rating 列。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2021-02-11
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多