PostgreSQL: вставить в новую таблицу N раз на основе значения столбца из исходной таблицы

Мне поручили реконструировать базу данных PostgreSQL, и я немного в тупике.

У меня есть таблица, похожая на эту:

| id | item_name | quantity | user_id |
| -- | --------- | -------- | ------- |
| 1  |   item1   |    1     |    1    | 
| 2  |   item2   |    3     |    6    |
| 4  |   item1   |    4     |    3    |
| 3  |   item3   |    5     |    6    |

Что мне нужно сделать, так это вставить их в другую таблицу как уникальные строки в зависимости от количества.

Необходимая структура таблицы на основе приведенных выше значений:

| id | item_name | user_id |
| -- | --------- | ------- |
| 1  |   item1   |    1    |
| 2  |   item2   |    6    |
| 3  |   item2   |    6    |
| 4  |   item2   |    6    |
| 5  |   item1   |    3    |
| 6  |   item1   |    3    |
| 7  |   item1   |    3    |
| 8  |   item1   |    3    |
| 9  |   item3   |    6    |
| 10 |   item3   |    6    |
| 11 |   item3   |    6    |
| 12 |   item3   |    6    |
| 13 |   item3   |    6    |

Я мог бы сделать это довольно легко с помощью скрипта Python, но для этого требуется, чтобы это было сделано с помощью Postgres, и мне не хватает опыта, необходимого для этого конкретного сценария.

Почему вам запрещено использовать Python? Это точно правильное решение.

Tim Roberts 22.03.2022 03:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте функцию сгенерировать_серию() для многократного получения значений с определенными значениями столбца.

Example: generate_series(start_value, end_value, interval)

-- PostgreSQL
select t.id, t.name, t.user_id
from (select *, generate_series(1, quantity, 1) no_of_times
      from test) t

Пожалуйста, проверьте это URLhttps://dbfiddle.uk/?rdbms=postgres_11&fiddle=351d8b5828ecd1050b78ac516329816b

Большое спасибо, это похоже именно то, что я искал!

banshee87 22.03.2022 21:55

Другие вопросы по теме