J'utilise PostgreSQL comme base de données. Et je dois créer une entrée dans la base de données, et si elle existe déjà, il suffit de mettre à jour ses champs, mais l'un des champs ne doit être mis à jour que s'il n'est pas défini.
J'ai utilisé les informations de cette question: /programming/13305878/dont-update-column-if-update-value-is-null , c'est assez lié à ce que j'ai.
J'ai essayé d'utiliser cette requête, mais lorsque je l'exécute, elle génère une erreur avec 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);
(les valeurs réelles sont remplacées, bien sûr).
Si je remplace affiliate_code = COALESCE(affiliate_code, value3)
par affiliate_code = value3
, tout fonctionne, mais pas de la façon dont je veux que cela fonctionne.
Comment puis-je faire fonctionner cela?
Voici comment ma table est définie:
CREATE TABLE accounts (
id VARCHAR NOT NULL UNIQUE,
token VARCHAR NOT NULL,
affiliate_code VARCHAR
);
= COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
.