我正在使用IMDb數據來查找一些選定電影的完整劇組信息。更新和交叉查詢具有非重複值的表?
我已經根據我的要求隔離了我的電影數據集。我現在有一個表movie (movie_id, movie_title, movie_year)
,有476行。
然後我列出了所有在這些電影中工作過的不同人物,總共存儲在表person (person_id, person_name)
中的44,706行。
現在我試圖把一個表crew (person_id, movie_id, role_id)
,其中每一行都將舉行一個獨特的組合的PERSON_ID和movie_id,說明一個事實,即同一個人可能對一些電影的工作。
首先我創建了表,並與人的非不同實例爲這樣的填充它:
CREATE TABLE crew
(
person_id INTEGER,
movie_id INTEGER,
role_id INTEGER,
);
INSERT INTO crew (person_id)
SELECT cast_info.person_id
FROM cast_info
INNER JOIN movie
ON cast_info.movie_id=movie.movie_id;
此時我應該指出,cast_info (id, person_id, movie_id, role_id)
是主表,它保存在現有的全部組合的信息在IMDb上託管的個人,電影和角色共有50,691,107行。
運行上面的代碼後,我在乘員組表表中以61,842行結束。仔細檢查SELECT count(distinct person_id) FROM crew;
告訴我,有44,706個獨特的人,如我在原來的人表中。
現在我在努力填補movie_id和在船員表ROLE_ID列。我嘗試下面的代碼:
UPDATE crew
SET movie_id =
(SELECT cast_info.movie_id
FROM cast_info, movie
WHERE cast_info.movie_id=movie.movie_id)
WHERE crew.person_id IN
(SELECT cast_info.person_id
FROM cast_info, person
WHERE cast_info.person_id=person.person_id);
所有這一切所做的是用相同的填補crew.movie_id列movie_id重複每一行。
如何更新我的表,以確保每個非不同PERSON_ID目前只有這些案件movie_id它出現在我的電影表?我正在研究SQLite,它不支持UPDATE語句上的INNER JOIN。
同時填充所有列。插入重複值然後嘗試更新不是要走的路。 –