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