mysql SQL -使用组合键在一个查询中更新多个记录

nhjlsmyf  于 2023-03-07  发布在  Mysql
关注(0)|答案(2)|浏览(132)

我已经看过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) );

有人能帮忙吗?

wljmcqd8

wljmcqd81#

不允许在case中使用元组case只允许一个操作数如果您使用元组,例如在您的case中,您会遇到错误“Operand should contain 1 column(s)”,因为有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) );
nmpmafwu

nmpmafwu2#

另一种方法

UPDATE `table_name`                                                             
SET                                                                
       `desc`   = CASE                                    
                    WHEN (`id_one`='1' AND `id_tow`='1') THEN '22222'                                                               
                    END                                                          
WHERE  (`id_one`, `id_tow`) IN ( ('1', '1') );

相关问题