मैं पोस्टग्रेस्क्ल के लिए थोडा नया हूं इसलिए मुझे टेबल के बीच संबंध बनाने जैसी साधारण चीजों में समस्याएं आ रही हैं।

इस अभ्यास में मैं संबंध तालिका नाटकों में जानकारी सम्मिलित करने में असमर्थ हूँ।

मुझे केवल खाली प्रश्न मिलते हैं और मैं थोड़े हताश हो रहा हूं।

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 नवम्बर 2019, 18:47

1 उत्तर

Actor और Movie टेबल खाली हैं। आपका प्राकृतिक जुड़ाव कभी भी Plays में डालने के लिए कोई परिणाम नहीं देगा - ऐसा कुछ भी नहीं है जिसका संदर्भ पंक्तियाँ दे सकता है। आप उन्हें अपने आयातित डेटा से भी भरना चाहेंगे:

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 नवम्बर 2019, 19:05