MariaDB:无法将数据库表相互链接

时间:2021-04-13 03:17:24

标签: mysql mariadb

我有一个不知道如何解决的问题,我正在开发一个类似 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 演员

提前致谢:)

1 个答案:

答案 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;