Używam PostgreSQL jako mojej bazy danych. I muszę utworzyć pozycję w bazie danych, a jeśli już istnieje, po prostu zaktualizuj jej pola, ale jedno z pól powinno zostać zaktualizowane tylko, jeśli nie jest ustawione.
Użyłem informacji z tego pytania: /programming/13305878/dont-update-column-if-update-value-is-null , jest to dość związane z tym, co mam.
Próbowałem użyć tego zapytania, ale po jego uruchomieniu występuje błąd 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);
(oczywiście wartości rzeczywiste są podstawiane).
Jeśli mogę wymienić affiliate_code = COALESCE(affiliate_code, value3)
z affiliate_code = value3
, wszystko działa, ale nie w taki sposób chcę go do pracy.
Jak mogę to zrobić?
Oto jak zdefiniowana jest moja tabela:
CREATE TABLE accounts (
id VARCHAR NOT NULL UNIQUE,
token VARCHAR NOT NULL,
affiliate_code VARCHAR
);
= COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
.