Можно ли в 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 шт):

Автор решения: Roman Konoval

Можно подготовить данные для вставки запросом:

INSERT INTO product(name, code, price, color)
SELECT 
    'Стол', 
    '95374342', 
    price,
    color
FROM parameters
WHERE code='95374342';
→ Ссылка