如何将1列包含10个varchar的数据分成10列,每个列1个var char?

时间:2019-04-04 19:44:20

标签: mysql sql mysql-workbench

我对SQL非常陌生。我有一些网站管理员发送给我的书籍的CSV文件,我正在尝试将它们整理到数据库表中。
  我的输入(CSV文件)看起来像这样=

Book Title | Volume | price | Genre |
Book | 1 | 10.99 | Science Fiction, Fantasy, Midevial, Magic|

有些标题多达10种类型。我的关键问题是,如何获取信息在“风格”列下,然后将其拆分为不同的列,以便每一列只有一种类型?

谢谢!

1 个答案:

答案 0 :(得分:0)

你不知道。您要做的是创建一个BookGenres表,其中包含book_idgenre的列。

您可以将现有的CSV数据加载到登台表中,其中包含genres的列。

然后您可以执行以下操作:

insert into bookgenres (book_id, genre)
    select book, substring_index(genres, ', ', 1)
    from staging;

insert into bookgenres (book_id, genre)
    select book, substring_index(substring_index(genres, ', ', 2), ', ', -1)
    from staging
    where genres like '%, %';

insert into bookgenres (book_id, genre)
    select book, substring_index(substring_index(genres, ', ', 3), ', ', -1)
    from staging
    where genres like '%, %, %'

. . .

insert into bookgenres (book_id, genre)
    select book, substring_index(substring_index(genres, ', ', 10), ', ', -1)
    from staging
    where genres like '%, %, %, %, %, %, %, %, %, %';

有一些技巧可以简化此操作,但是对于一次性数据加载,只需编写所需的SQL就足够简单了。