我有一个包含所有类型参数的表。 该表的结构是: 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);
答案 0 :(得分:6)
ON DUPLICATE KEY子句不仅适用于主键:
如果指定ON DUPLICATE KEY UPDATE,并插入一行 会导致a中的重复值 UNIQUE索引或PRIMARY KEY,UPDATE 执行旧行
因此,除非我遗漏了一些显而易见的东西,否则您只需要在列组合上创建一个唯一的索引,以使其独特:
ALTER TABLE params_table
ADD UNIQUE unique_object_param(object_id,param_name);