【问题标题】:Splitting cell into multiple rows将单元格拆分为多行
【发布时间】:2021-03-29 12:41:08
【问题描述】:

我有一个包含 1000 部电影及其对应类型的 CSV 文件,大多数电影都有不止一种类型,作为规范化过程的一部分,我必须拆分类型单元格,以便每个单元格中只有一种类型。

下图最能说明我在说什么以及我想要实现的目标。

有没有一种有效的方法可以根据流派的数量复制movieID 单元格并将流派拆分到这些单元格中,而不是手动执行?

例如,movie1 有 3 个流派:Drama,Romance,Thriller。我想要实现的是:“movie1”的3个单元格和相应的流派:DramaRomanceThriller

【问题讨论】:

    标签: mysql csv erd


    【解决方案1】:

    您应该创建 3 个表。一个用于电影,一个用于流派,一个用于查找电影和流派。

    CREATE TABLE movies
        id INT PRIMARY KEY,
        name VARCHAR(100),
        ... whatever else you need ...;
    
    CREATE TABLE genres
        id INT PRIMARY KEY,
        name VARCHAR(100),
        ... whatever else you need ...;
    
    CREATE TABLE movie_genre
        movie_id INT,
        genre_id INT;
    

    对于您的示例,表格将包含:

    INSERT INTO movies (id, name) VALUES (1, 'movie1');
    
    INSERT INTO genres(id, name) VALUS (1, 'Drama'),(2, 'Romance'),(3, 'Thriller');
    
    INSERT INTO movie_genre (movie_id, genre_id) VALUES (1, 1),(1,2),(1,3);
    

    我添加了一个工作小提琴

    http://sqlfiddle.com/#!9/0dfd42/1

    【讨论】:

    • 我已经创建了这 3 个表,我附上了我的 ERD 的图片,但我担心的是在向表中插入数据时。
    • 我已经将数据插入到我的“电影”和“流派”表中,但我关心的是“电影流派”表。
    • 如果你插入你必须首先创建流派表。然后插入一部电影,获取他的 id(最后插入 id)并将行添加到 movie_genre 表中。当然,这比在电影表中仅写入一行要复杂一些,但之后您在获取数据时将拥有更大的灵活性。通常你只插入一次并经常阅读。所以这是一个优先级的问题
    • 即使我对电影了解不多,但也许他们有自己独特的身份,就像书籍一样。所以你可以在你的表中使用这个 id。所以你在插入之前就知道id。这样就省去了插入后请求id的步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多