Je suis un peu nouveau sur postgresql donc j'ai des problèmes avec des choses simples comme la création de relations entre les tables.

Dans cet exercice, je ne peux pas insérer les informations dans la table des relations.

Tout ce que je reçois, ce sont des requêtes vides et je suis un peu désespéré.

DROP TABLE IF EXISTS Actor CASCADE;
CREATE TABLE Actor (
    id_actor SERIAL,
    name     VARCHAR, 
    fb_likes INTEGER,
    PRIMARY KEY(id_actor)
);

DROP TABLE IF EXISTS Movie CASCADE;
CREATE TABLE Movie 
(
    id_movie SERIAL, 
    title VARCHAR, 
    duration INTEGER,
    PRIMARY KEY(id_movie)
);

DROP TABLE IF EXISTS Plays CASCADE;
CREATE TABLE Plays (
    id_actor           SERIAL, 
    id_movie           SERIAL, 
    is_main_character  BOOLEAN,  
    FOREIGN KEY (id_actor) REFERENCES Actor (id_actor), 
    FOREIGN KEY (id_movie) REFERENCES Movie (id_movie)
);

DROP TABLE IF EXISTS Imported;
CREATE TABLE Imported (
    title             VARCHAR,
    duration          INTEGER,
    name              VARCHAR,
    fb_likes          INTEGER,
    is_main_character BOOLEAN
);

COPY Imported FROM '/Applications/movie.csv' DELIMITER ';' csv header;

INSERT INTO Plays (id_actor, id_movie, is_main_character)
SELECT Actor.id_actor, Movie.id_movie, Imported.is_main_character
FROM Actor NATURAL JOIN Movie NATURAL JOIN Imported;
0
dani 3 nov. 2019 à 18:47

1 réponse

Les tables Actor et Movie sont vides. Votre jointure naturelle ne donnera jamais de résultats à insérer dans Plays - il n'y a rien que les lignes puissent référencer. Vous voudrez également les remplir avec vos données importées:

INSERT INTO Actor (name, fb_likes)
SELECT DISTINCT Imported.name, Imported.fb_likes
FROM Imported;

INSERT INTO Movie (title, duration)
SELECT DISTINCT Imported.title, Imported.duration
FROM Imported;

INSERT INTO Plays (id_actor, id_movie, is_main_character)
SELECT Actor.id_actor, Movie.id_movie, Imported.is_main_character
FROM Imported JOIN Actor USING (name) JOIN Movie USING (title);
0
Bergi 3 nov. 2019 à 16:05