Заполнить SQL таблицу данными из другой

Есть 2 таблицы:

"PS" PS

"S" "S"

Как заполнить колонку "UserId" в таблице "S" на основании данных из таблицы "PS"? Другими словами, для каждого "PS"."subscriptionId" нужно посмотреть "PS"."UserId" и записать его значение в "S"."userID" так чтобы "PS"."subscriptionId" = "S"."id".

Необходимо фактически заполнить таблицу "S"

Результат который хочу получить:

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Stefanov.sm

Начните с новой таблицы:

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";
→ Ссылка
Автор решения: Hleb Karpenka

Можно реализовать через UPDATE

UPDATE s SET userId = ps.userId
FROM ps WHERE s.id = ps.subscriptionId
→ Ссылка