Saya menggunakan PostgreSQL sebagai basis data saya. Dan saya perlu membuat entri dalam database, dan jika sudah ada, perbarui saja bidangnya, tetapi salah satu bidang harus diperbarui hanya jika tidak disetel.
Saya telah menggunakan info dari pertanyaan ini: /programming/13305878/dont-update-column-if-update-value-is-null , ini cukup terkait dengan apa yang saya miliki.
Saya mencoba menggunakan kueri ini, tetapi ketika saya menjalankannya, ia salah dengan Column reference 'affiliate_code' is ambiguous
:
INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
affiliate_code = COALESCE(affiliate_code, value3);
(nilai sebenarnya diganti, tentu saja).
Jika saya ganti affiliate_code = COALESCE(affiliate_code, value3)
dengan affiliate_code = value3
, semuanya berfungsi, tetapi tidak dengan cara yang saya inginkan berfungsi.
Bagaimana saya bisa membuat ini berfungsi?
Beginilah tabel saya didefinisikan:
CREATE TABLE accounts (
id VARCHAR NOT NULL UNIQUE,
token VARCHAR NOT NULL,
affiliate_code VARCHAR
);
sumber
= COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
.Jawaban:
Dari dokumen,
Jadi alih-alih, coba ini per ypercubeᵀᴹ
sumber