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 ...