ฉันใช้ PostgreSQL เป็นฐานข้อมูลของฉัน และฉันจำเป็นต้องสร้างรายการในฐานข้อมูลและหากมีอยู่แล้วเพียงแค่อัปเดตฟิลด์ แต่ควรอัปเดตหนึ่งในฟิลด์ต่อไปหากยังไม่ได้ตั้งค่า
ฉันใช้ข้อมูลจากคำถามนี้: /programming/13305878/dont-update-column-if-update-value-is-nullมันค่อนข้างเกี่ยวข้องกับสิ่งที่ฉันมี
ฉันพยายามที่จะใช้แบบสอบถามนี้ แต่เมื่อฉันเรียกใช้มันข้อผิดพลาดกับ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);
(ค่าจริงถูกแทนที่แน่นอน)
หากฉันแทนที่affiliate_code = COALESCE(affiliate_code, value3)
ด้วยaffiliate_code = value3
ทุกอย่างทำงานได้ แต่ไม่ใช่ในแบบที่ฉันต้องการให้ทำงาน
ฉันจะทำงานนี้ได้อย่างไร
นี่คือวิธีการกำหนดตารางของฉัน:
CREATE TABLE accounts (
id VARCHAR NOT NULL UNIQUE,
token VARCHAR NOT NULL,
affiliate_code VARCHAR
);
= COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
ดู