Трябва да уточните имената и псевдонимите на вашите таблици. Освен това връзката между двете таблици е колоната image (data в новата таблица file_data ):
WITH inserted AS (
INSERT INTO file_data (data)
SELECT image
FROM task_log
WHERE image IS NOT NULL
RETURNING id, data -- can only reference target row
)
UPDATE task_log t
SET attachment_id = i.id
, attachment_type = 'INLINE_IMAGE'
FROM inserted i
WHERE t.image = i.data;
Както е обяснено в стария ми отговор, който споменахте, image трябва да е уникален в task_log за да работи това:
Добавих техника как да разграничавам неуникалните стойности в посочения отговор. Не съм сигурен дали искате дублирани изображения в file_data , обаче.
В RETURNING клауза на INSERT можете да препращате само към колони от вмъкнатия ред. Ръководството:
Удебелен акцент е мой.
Сгъване на дублиращи се изходни стойности
Ако искате отделни записи в целевата таблица на INSERT (task_log ), всичко, от което се нуждаете в този случай, е DISTINCT в началния SELECT :
WITH inserted AS (
INSERT INTO file_data (data)
SELECT DISTINCT image -- fold duplicates
FROM task_log
WHERE image IS NOT NULL
RETURNING id, data -- can only reference target row
)
UPDATE task_log t
SET attachment_id = i.id
, attachment_type = 'INLINE_IMAGE'
FROM inserted i
WHERE t.image = i.data;
Полученият file_data.id се използва многократно в task_log . Имайте предвид, че множество редове в task_log сега посочете същото изображение във file_data . Внимавайте с актуализациите и изтриванията...