sql ошибка создания просмотра нерелевантного результата - PullRequest
1 голос
/ 19 июня 2020

Я бы хотел смотреть любовные фильмы, только если они есть на Netflix.

Вот код, который я использовал и извлек фотографии результатов. К сожалению, я получил избыточный результат, включая не связанные списки mov ie.

 CREATE VIEW DB2020_romance_on_netflix  AS
    SELECT
    distinct(DB2020_MOVIEINFO.MOVIE_ID), DB2020_MOVIEINFO.title, DB2020_MOVIEINFO.plot, DB2020_genre.genre, DB2020_ON_NETFLIX.on_netflix
    FROM
    DB2020_genre, DB2020_MOVIEINFO, DB2020_ON_NETFLIX
    WHERE
        DB2020_genre.genre = 'romance' and
        DB2020_genre.mov_id in (SELECT mov_id 
            FROM DB2020_ON_NETFLIX 
            WHERE on_netflix = 'yes');

 select * from DB2020_romance_on_netflix;

enter image description here

Вот еще код, необходимый для проверки.

CREATE TABLE DB2020_MOVIEINFO (
        MOVIE_ID            Int  primary key,
        title           VARCHAR(30) NOT NULL, 
        plot      VARCHAR(500) NOT NULL,
        main_target     VARCHAR(10) NOT NULL,
        country     char(6) NOT NULL,
    INDEX (MOVIE_ID)
    );
    DESCRIBE DB2020_MOVIEINFO;

    INSERT INTO DB2020_MOVIEINFO VALUES (1, 'Parasite', 'Greed and class discrimination threaten the newly formed symbiotic relationship between the wealthy Park family and the destitute Kim clan.','Adult','Korea');
    INSERT INTO DB2020_MOVIEINFO VALUES (2, 'Before Sunset', 'Celine and Jesse, who met nine years ago in Vienna, cross paths again for a single day in Paris. Together, they try to find out what might have happened if they had acted on their feelings back then.','Adult','US');
    INSERT INTO DB2020_MOVIEINFO VALUES (3,'Before Sunrise', 'While travelling on a train in Europe, Jesse, an American man, meets Celine, a French woman. On his last day in Europe before returning to the US, he decides to spend his remaining hours with her.','All', 'US');


    CREATE TABLE DB2020_genre(
        mov_id      INT NOT NULL,
        genre       VARCHAR(15) NOT NULL,
        release_date    DATE NOT NULL,
        INDEX (genre),
        PRIMARY KEY (mov_id, genre),
        FOREIGN KEY (mov_id) REFERENCES DB2020_MOVIEINFO(MOVIE_ID)
            ON DELETE CASCADE ON UPDATE CASCADE);
    DESCRIBE DB2020_genre;

    INSERT INTO DB2020_genre VALUES (1, 'thriller',str_to_date('20190530','%Y%m%d') );
    INSERT INTO DB2020_genre VALUES (2, 'romance',str_to_date('20041024','%Y%m%d'));
    INSERT INTO DB2020_genre VALUES (3, 'romance',str_to_date('19960316','%Y%m%d'));



    CREATE TABLE DB2020_ON_NETFLIX(
        mov_id          INT NOT NULL,
        on_netflix      VARCHAR(10) NOT NULL,
        service_start_year  VARCHAR(10),
        PRIMARY KEY (mov_id, on_netflix),
        INDEX(mov_id),
        FOREIGN KEY (mov_id) REFERENCES DB2020_MOVIEINFO(MOVIE_ID)
            ON DELETE CASCADE ON UPDATE CASCADE);

    DESCRIBE DB2020_ON_NETFLIX;

    INSERT INTO DB2020_ON_NETFLIX VALUES (1, 'no', NULL);
    INSERT INTO DB2020_ON_NETFLIX VALUES (2, 'yes', '2018');
    INSERT INTO DB2020_ON_NETFLIX VALUES (3, 'yes', '2018');

Интересно, из-за чего возникла эта проблема. Заранее большое спасибо за помощь.

1 Ответ

0 голосов
/ 19 июня 2020

Это сработало. естественное соединение сделало некоторые дублирования. применение левого внешнего соединения помогло.

 CREATE VIEW DB2020_romance_on_netflix  AS
    SELECT
    DB2020_MOVIEINFO.title, DB2020_MOVIEINFO.plot, DB2020_genre.genre
    FROM
    DB2020_genre left outer join DB2020_MOVIEINFO on DB2020_genre.MOVIE_ID = DB2020_MOVIEINFO.MOVIE_ID
    WHERE
        DB2020_genre.genre = 'romance' and
        DB2020_genre.MOVIE_ID in (SELECT MOVIE_ID
            FROM DB2020_ON_NETFLIX 
            WHERE on_netflix = 'yes');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...