Как избавиться от дублирования SELECT-запроса при вставке в таблицу БД PostgreSQL?
При вставке в таблицу нужно указать id группы, полученного из другой таблицы. Ставку нужно делать только для одной группы пользователей. Записей может быть очень много - миллионы :) Вариант "Посмотреть в БД и жестко указать в запросе" не подходит - на разных стендах могут быть разные id.
Запрос вида:
INSERT INTO accounts(user_id, group_id) VALUES
('12345678-1234-1234-1234-123456789001', (select g.id from groups g where g.name = 'pilots')),
('12345678-1234-1234-1234-123456789002', (select g.id from groups g where g.name = 'pilots')),
('12345678-1234-1234-1234-123456789003', (select g.id from groups g where g.name = 'pilots')),
('12345678-1234-1234-1234-123456789004', (select g.id from groups g where g.name = 'pilots'));
надо модифицировать так, чтобы не нужно было N раз делать SELECT, а только один раз в самом начале.
В MySQL это выглядело бы так:
SELECT id INTO @groupid FROM groups WHERE name = 'pilots';
INSERT INTO accounts(usere_id, group_id) VALUES
('12345678-1234-1234-1234-123456789001', @groupid),
('12345678-1234-1234-1234-123456789002', @groupid),
('12345678-1234-1234-1234-123456789003', @groupid);
С PostgeSQL не получается реализовать.