SQL - 使用Composite Key在一个查询中更新多个记录

时间:2016-11-22 19:17:39

标签: mysql sql records

我查看过this个问题,该问题涉及在一个查询中更新多个记录。

一般解决方案是

UPDATE table_name
SET field_to_update = CASE table_key 
                  WHEN key_value1 THEN field_value1 
                  WHEN key_value2 THEN feild_value2 
                  ELSE feild_to_update
                  END
WHERE table_key IN(key_value1 , key_value2);

我的问题是谁可以根据合成密钥进行调整。假设我有列

(id_1, id_2, column_to_update)

其中id_1和id_2组成复合主键。

我的问题变得更简单,因为其中一个id列对于特定查询将是常量。

例如,我需要一些

的内容
 UPDATE table_name
 SET field_to_update = CASE (key1, key2) 
              WHEN (1,1) THEN field_value1 
              WHEN (2,1) THEN feild_value2 
              ELSE feild_to_update
              END
 WHERE (key1, key2) IN ( (1, 1) , (2, 1) );

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

不允许使用元组大小写只允许一个操作数如果你使用像你的情况一样的元组你有 错误"操作数应包含1列"因为是2个操作数

但你可以用一些操作覆盖,例如concat(和隐式转换)

  UPDATE table_name
   SET field_to_update = CASE concat(key1, key2) 
                WHEN concat(1,1) THEN field_value1 
                WHEN concat(2,1) THEN feild_value2 
                ELSE feild_to_update
                END
   WHERE concat(key1, key2) IN ( concat(1, 1) , concat(2, 1) );