Мне поручили реконструировать базу данных 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, и мне не хватает опыта, необходимого для этого конкретного сценария.
Используйте функцию сгенерировать_серию() для многократного получения значений с определенными значениями столбца.
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
Большое спасибо, это похоже именно то, что я искал!
Почему вам запрещено использовать Python? Это точно правильное решение.