5

あらゆる種類のパラメータを含むテーブルがあります。テーブルの構造は次のとおりです:id、object_id、param_name、param_value

次のコードは機能しますが、結果を更新する代わりに追加します。事実、私のフィールドは一意ではないため、 ON DUPLICATE KEYを使用できません(もちろんidを除く)

INSERT INTO `params_table` (`object_id`, `param_name`, `param_value`)
SELECT
A.id AS my_object_id,
'XYZ' AS my_param_name,
IF(TMP.abc IS NULL,0,1) AS my_param_value
FROM
ref_table AS A
LEFT JOIN tmp_table AS TMP ON TMP.abc = A.abc
ON DUPLICATE KEY
UPDATE `param_value` = IF(TMP.abc IS NULL,0,1);
4

1 に答える 1

6

ON DUPLICATE KEY句は、主キーに対してのみ機能するわけではありません。

ON DUPLICATE KEY UPDATEを指定し、UNIQUE索引またはPRIMARY KEYに重複値を引き起こす行が挿入された場合、古い行のUPDATEが実行されます。

したがって、明らかな何かが欠けていない限り、一意にしたい列の組み合わせに一意のインデックスを作成する必要があります。

ALTER TABLE params_table
ADD UNIQUE unique_object_param(object_id,param_name);
于 2011-04-28T10:01:09.900 に答える