Sqlite 我不知道';我不知道我的sql查询只提取了第一个元素

Sqlite 我不知道';我不知道我的sql查询只提取了第一个元素,sqlite,Sqlite,我正在使用sqlite3。我正在IMDB数据库上工作。我想提取评级为10.0的电影,但这只是给我第一个结果。虽然,我可以提取电影id,但无法复制标题 sqlite> .schema CREATE TABLE movies ( id INTEGER, title TEXT NOT NULL, year NUMERIC, PRIMARY

我正在使用sqlite3。我正在IMDB数据库上工作。我想提取评级为10.0的电影,但这只是给我第一个结果。虽然,我可以提取电影id,但无法复制标题

sqlite> .schema
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)
            );
sqlite> SELECT movie_id from ratings WHERE rating = 10.0;
movie_id
10176328
10342460
10544422
10716326
10914342
11099860
2632430
2633610
3525174
5390098
8035236
8563656
sqlite> SELECT title FROM movies WHERE id = (SELECT movie_id from ratings WHERE rating = 10.0);
title
Exteriores: Mulheres Brasileiras na Diplomacia
sqlite> SELECT title FROM movies where id = '10176328';
title
Exteriores: Mulheres Brasileiras na Diplomacia
sqlite> 

您希望在中加入
,而不是相等条件:

SELECT m.title 
FROM movies m
WHERE m.id IN (SELECT r.movie_id from ratings r WHERE r.rating = 10.0)

这是因为子查询确实返回多行。在许多数据库中,这会生成运行时错误,但sqlite似乎足够灵活,可以毫无错误地处理此错误(但仍然没有执行您想要的操作)。

您希望在
中使用
,而不是使用相等条件:

SELECT m.title 
FROM movies m
WHERE m.id IN (SELECT r.movie_id from ratings r WHERE r.rating = 10.0)

这是因为子查询确实返回多行。在许多数据库中,这会产生运行时错误,但sqlite似乎足够灵活,可以毫无错误地处理此错误(但仍然不能执行您想要的操作)。

一种可能比
中的
更有效的替代方法是使用
EXISTS

SELECT m.title 
FROM movies AS m
WHERE EXISTS (SELECT 1 FROM ratings AS r WHERE r.rating = 10.0 AND r.movie_id = m.id)

一种可能比
中的
更有效的替代方法是使用
EXISTS

SELECT m.title 
FROM movies AS m
WHERE EXISTS (SELECT 1 FROM ratings AS r WHERE r.rating = 10.0 AND r.movie_id = m.id)