Вставить / обновить значения в столбце postgresql

Всем привет! Имеется 2 таблицы. Необходимо из первого столбца таблицы №2 вставить значения во второй столбец таблицы №1. Никакой логики при вставке нет. Подскажите, как правильно будет осуществить вставку (желательно без процедур)? Язык PostgreSQL 8.3

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


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

Автор решения: Akina

Для затравки.

Копирование записей из таблицы 2 в таблицу 1 так, что каждое значение из таблицы 2 попадает в случайную запись таблицы 1. Если в таблице 1 записей больше, некоторые её записи останутся необновлёнными, если меньше, то часть значений из таблицы 2 никуда не попадёт.

WITH 
cte1 AS ( SELECT column_1, ROW_NUMBER() OVER (ORDER BY RANDOM()) rn 
          FROM table1 ),
cte2 AS ( SELECT column_1, ROW_NUMBER() OVER (ORDER BY RANDOM()) rn 
          FROM table2 )
UPDATE table1
SET column_2 = ( SELECT cte2.column_1
                 FROM cte2
                 JOIN cte1 ON cte1.rn = cte2.rn 
                 WHERE cte1.column_1 = table1.column_1 );

fiddle

Суть происходящего - записи в обеих таблицах нумеруются (в случайном порядке), затем выполняется обновление на основании равенства присвоенных номеров.

→ Ссылка