Можно ли в postgresql вернуть из одного подзапроса несколько полей для вставки во внешнем запросе?
Можно ли в postgresql сделать такую штуку?
У меня есть экселевский файл на 350к строк. Каждая строка содержит name и code.
И есть пустая таблица product, содержащая столбцы id, name, code, price, color, которую нужно заполнить из этого файла.
А ещё таблица parameters, содержащая id, code, price, color. В ней уже заполнены соответствия, какому коду товара какая цена и цвет соответствуют.
Мне нужно загрузить из файла данные в product, на лету подставив нужные данные из parameters. С одной стороны, я могу написать запрос, подставив name и code из файла, а price и color запросив из второй итаблицы
INSERT INTO product(name, code, price, color)
VALUES (
'Стол',
'95374342',
(SELECT price FROM parameters WHERE code='95374342'),
(SELECT color FROM parameters WHERE code='95374342')
);
Но это получится два подзапроса к одной таблице. А если там будет не два параметра а 20? Писать 20 обращений к одной и той же таблице как-то неправильно выглядит. Можно ли как-то обойтись одним подзапросом, чтобы получить из него все нужные данные?
PS: Изменять струкутуру БД нельзя. Да, она не оптимальна. Но так сложилось исторически и никто ничего менять не будет.
Ответы (1 шт):
Можно подготовить данные для вставки запросом:
INSERT INTO product(name, code, price, color)
SELECT
'Стол',
'95374342',
price,
color
FROM parameters
WHERE code='95374342';