Anda perlu mendapatkan nama tabel dan alias Anda dengan benar. Plus, koneksi antara dua tabel adalah kolom image (data di tabel baru 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;
Seperti yang dijelaskan dalam jawaban lama saya yang Anda rujuk, image harus unik di task_log agar ini berhasil:
Saya menambahkan teknik bagaimana membedakan nilai non-unik dalam jawaban yang direferensikan. Tidak yakin apakah Anda ingin gambar duplikat di file_data , meskipun.
Dalam RETURNING klausa dari INSERT Anda hanya dapat mereferensikan kolom dari baris yang disisipkan. Manual:
Penekanan saya yang berani.
Lipat nilai sumber duplikat
Jika Anda ingin entri yang berbeda dalam tabel target INSERT (task_log ), yang Anda butuhkan dalam hal ini adalah DISTINCT di awal 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 yang dihasilkan digunakan beberapa kali di task_log . Ketahuilah bahwa beberapa baris di task_log sekarang arahkan ke gambar yang sama di file_data . Hati-hati dengan pembaruan dan penghapusan ...