Tôi đang sử dụng PostgreSQL làm cơ sở dữ liệu của mình. Và tôi cần tạo một mục trong cơ sở dữ liệu và nếu nó đã tồn tại, chỉ cần cập nhật các trường của nó, nhưng một trong các trường chỉ nên được cập nhật nếu nó không được đặt.
Tôi đã sử dụng thông tin từ câu hỏi này: /programming/13305878/dont-update-column-if-update-value-is-null , nó hoàn toàn liên quan đến những gì tôi có.
Tôi đã cố gắng sử dụng truy vấn này, nhưng khi tôi chạy nó, nó báo lỗi 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);
(tất nhiên giá trị thực được thay thế).
Nếu tôi thay thế affiliate_code = COALESCE(affiliate_code, value3)
với affiliate_code = value3
, mọi thứ suôn sẻ, nhưng không phải theo cách tôi muốn nó làm việc.
Làm thế nào tôi có thể làm cho công việc này?
Đây là cách bảng của tôi được định nghĩa:
CREATE TABLE accounts (
id VARCHAR NOT NULL UNIQUE,
token VARCHAR NOT NULL,
affiliate_code VARCHAR
);
= COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
.