Как мне получить 1 столбец с 10 varchars в 10 столбцов по 1 var char каждый? - PullRequest
0 голосов
/ 04 апреля 2019

Я очень новичок в SQL. У меня есть несколько CSV-файлов книг, которые мне прислали некоторые веб-мастера, и я пытаюсь отсортировать их в таблицу базы данных.
Мой ввод (файл CSV) выглядит так =

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

Некоторые из названий имеют целых 10 жанров. Мой ключевой вопрос: как мне взять информацию в столбце жанров и разделить ее на разные столбцы, чтобы в каждом столбце был только один жанр?

Спасибо!

1 Ответ

0 голосов
/ 04 апреля 2019

Ты не.Вам нужно создать таблицу BookGenres со столбцами для book_id и genre.

. Вы можете загрузить свои существующие данные 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, которыйтебе нужно.

...