Как вставить новую строку с идентификатором из другой таблицы в цикл с Postgressql - PullRequest
0 голосов
/ 11 октября 2019

Я хотел бы вставить новую строку в таблицу profit для каждого пользователя, который существует в db: select id * from users. Количество пользователей является динамическим, поэтому мне нужно получить их всех. Мне нужен цикл в Postgres SQL. У меня есть проблема, чтобы понять это самостоятельно. Это было бы что-то вроде этого:

select id * from users as user_ids

for (each userId in user_ids) {
 insert into profit (user_id, value) values (userId, 23);
}

Могу ли я попросить вас о помощи? Я уже отвечал на многие вопросы:

Вставить новую строку с данными, вычисленными из других строк

PostgresSQL вставить несколько строк, идентификатор возвращен из запросов select

Пока не повезло

1 Ответ

2 голосов
/ 11 октября 2019

Мышление в «циклах» почти всегда неправильно при работе с SQL. Вы должны думать с точки зрения наборов и того, как вы работаете с ними. Оператор SQL описывает именно это: как получить набор и что делать с этим набором строк.

В этом случае вы можете использовать инструкцию SELECT в качестве источника для INSERT:

insert into profit (user_id, value) 
select id, 23
from users;

Обратите внимание, что в этом случае у вас нет предложения values.

...