データベースとしてPostgreSQLを使用しています。そして、データベースにエントリを作成する必要があります。それが既に存在する場合は、そのフィールドを更新するだけですが、フィールドの1つは、設定されていない場合にのみ更新する必要があります。
私はこの質問の情報を使用しました: https://stackoverflow.com/questions/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
);
_
ドキュメントから、
conflict_actionは、代替のON CONFLICTアクションを指定します。 DO NOTHING、または競合が発生した場合に実行されるUPDATEアクションの正確な詳細を指定するDO UPDATE句のいずれかです。 ON CONFLICT DO UPDATEのSET句とWHERE句は、テーブル名(またはエイリアス)を使用して既存の行、および特別な除外されたテーブルを使用して挿入が提案された行にアクセスできます。 SELECT権限が必要です対応する除外された列が読み取られるターゲットテーブルの任意の列。
代わりに、これをypercubeごとに試してくださいᵀᴹ
INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
affiliate_code = COALESCE(accounts.affiliate_code, excluded.affiliate_code);