SQL - обновить несколько записей в одном запросе с помощью составного ключа

Я посмотрел на этот вопрос, который касается обновления нескольких записей в одном запросе.

Общее решение

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 образуют составной первичный ключ.

Моя проблема упрощается тем фактом, что один из столбцов идентификатора будет постоянным для конкретного запроса.

Например, мне нужно что-то вроде

 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) );

Может кто-нибудь помочь, пожалуйста?

2 ответа

Решение

Использование кортежа в случае, если это не разрешено, в случае, если разрешен только один операнд, если вы используете кортеж, как в вашем случае, у вас появляется ошибка "Операнд должен содержать 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) );

Другой путь

      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') );
Другие вопросы по тегам