【发布时间】:2016-08-07 21:12:17
【问题描述】:
我正在使用 IMDb 数据来查找一些选定电影的完整剧组信息。
我有一个名为 movie 的表,我在其中隔离了符合我要求的电影,总共 476 行,其中 movie_id 是每部电影的唯一标识符。
我有一个名为 crew_info 的表,其中包含 movie_id、person_id 和 role_id 列。
作为第一步,我想创建一个新表,仅隔离那些在我的 movie 表中存在的电影的工作人员。我想要一份不同人物的名单,因此即使同一个人参与了 movie 中的多部电影,也不会出现重复。
我可以想到几种方法来做到这一点,但不确定是否有区别/哪个更好。首先,我创建了一个新表:
CREATE TABLE person
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
person_id INTEGER,
person_name TEXT,
person_birth INTEGER
);
现在我认为我需要执行以下操作之一:
INSERT INTO person (person_id)
SELECT DISTINCT person_id
FROM cast_info
WHERE movie_id IN
(
SELECT movie_id
FROM cast_info
INTERSECT
SELECT movie_id
FROM movie
);
或者
INSERT INTO person (person_id)
SELECT DISTINCT person_id
FROM cast_info
INNER JOIN movie
ON cast_info.movie_id=movie.movie_id;
或者
INSERT INTO person (person_id)
SELECT DISTINCT person_id
FROM cast_info
WHERE EXISTS
(
SELECT movie_id
FROM cast_info
WHERE cast_info.movie_id=movie.movie_id
);
稍后我打算使用类似的语句,使用从其他相关表交叉查询的 person_name 和 person_birth 值更新表。
这些表达式会产生相同的结果吗?如果不是,哪一种效果最好?
【问题讨论】:
-
你是从哪里得到 person_name 和 person_birth 的?
-
@vkp 还有另外两个表,分别称为 name 和 person_info,分别保存着各自的信息。每个都依赖于相同的 person_id 标识符。不想将它们包含在这篇文章中以避免让它变得过于丰富,我想如果我克服了最初对这些陈述的困惑,我想弄清楚这些问题就不会那么麻烦了。
标签: sql database sqlite exists