Заполнить SQL таблицу данными из другой
Есть 2 таблицы:
Как заполнить колонку "UserId" в таблице "S" на основании данных из таблицы "PS"? Другими словами, для каждого "PS"."subscriptionId" нужно посмотреть "PS"."UserId" и записать его значение в "S"."userID" так чтобы "PS"."subscriptionId" = "S"."id".
Необходимо фактически заполнить таблицу "S"
Результат который хочу получить:
Ответы (2 шт):
Начните с новой таблицы:
truncate table "S";
Затем заполните ее данными:
insert into "S" ("id", "userId")
select t.subs_id, coalesce("PS"."userId", 0)
from generate_series(1, (select max("subscriptionId") from "PS"), 1) t(subs_id)
left outer join "PS" on t.subs_id = "PS"."subscriptionId";
На самом деле таблица "S" является избыточным, поскольку она не содержит никакой новой информации, является лишь представлением существующих данных.
Поэтому подумайте о создании представления (возможно, материализованного) вместо таблицы.
Например, так:
create view "SV" as
select t.subs_id as "id", coalesce("PS"."userId", 0) as "userId"
from generate_series(1, (select max("subscriptionId") from "PS"), 1) t(subs_id)
left outer join "PS" on t.subs_id = "PS"."subscriptionId";
Можно реализовать через UPDATE
UPDATE s SET userId = ps.userId
FROM ps WHERE s.id = ps.subscriptionId


