我有一个不知道如何解决的问题,我正在开发一个类似 IMDB 的系统,我已经在单独的表格中删除了一些电影及其演员:
电影表:
movie_id(PK) | 名称 | 收入 | release_date | 评分 |
---|---|---|---|---|
1 | 复仇者联盟 | 19,238,834 | 2010/2/20 | 8.8 |
人员表:
person_id(PK) | 名称 | DOB | 国籍 | 生物 |
---|---|---|---|---|
22 | 小罗伯特唐尼 | 1965/4/4 | 美国 | 小罗伯特 D. 是美国演员。 |
现在的问题是我有另一个 MOVIE-PERSON 桥接表:
movie_name | person_name | 角色 |
---|---|---|
复仇者联盟 | 小罗伯特唐尼 | 演员 |
我需要在我的第三个桥接表中用相应的电影 ID 替换每部电影,并且同样适用于 person --> person_id。
所以它看起来像这样:
更新的桥表:
movie_id | person_id | 角色 |
---|---|---|
1 | 22 | 演员 |
提前致谢:)
答案 0 :(得分:0)
如果电影名称是唯一的,那么我想你需要这样的东西
-- Creating your first table
CREATE TABLE MOVIES(id INTEGER, name VARCHAR(50));
-- Inserting sample data to your first table
INSERT INTO MOVIES(id, name) values(1, 'Avengers');
-- Creating your many-to-many table, Add foreign key to the first table
CREATE TABLE MOVIEPERSON(movie_name VARCHAR(50), movie_id INTEGER);
-- Inserting sample data to your many-to-many table
INSERT INTO MOVIEPERSON(movie_name) values('Avengers');
-- Fill data in the many-to-many table id column based in data from first table
UPDATE MOVIEPERSON, MOVIES
SET MOVIEPERSON.movie_id=MOVIES.id
WHERE MOVIEPERSON.movie_name = MOVIES.name
您可以使用 join 实现这一点的另一种方法,并且适用于第一个和第二个表
CREATE TABLE MOVIES(id INTEGER, name VARCHAR(50));
INSERT INTO MOVIES(id, name) values(1, 'Avengers');
CREATE TABLE PERSONS(id INTEGER, name VARCHAR(50));
INSERT INTO PERSONS(id, name) values(5, 'Tom Something');
CREATE TABLE MOVIEPERSON(movie_name VARCHAR(50), person_name VARCHAR(50), movie_id INTEGER, person_id INTEGER);
INSERT INTO MOVIEPERSON(movie_name, person_name) values('Avengers', 'Tom Something');
UPDATE
MOVIEPERSON mp
INNER JOIN MOVIES m ON mp.movie_name = m.name
INNER JOIN PERSONS p ON mp.person_name = p.name
SET mp.movie_id=m.id, mp.person_id=p.id;