Можем ли мы объединить несколько обновлений SQL в один SQL? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть список обновлений sql, как показано ниже:

UPDATE variable SET type='aa1' WHERE type='aaa';
UPDATE variable SET type='x1' WHERE type='bbb';
UPDATE variable SET type='da1' WHERE type='ccc';
UPDATE variable SET type='ac1' WHERE type='ddd';
-- more update sql

Так как есть много sqls, но они выглядят одинаково, мне интересно, можем ли мы объединить его в один sql, например ниже:

UPDATE variable SET type=? WHERE type=?;

Я знаю, что мы можем использовать CASE WHEN, но решение кажется уродливым, есть ли более элегантный способ сделать это? (Может быть, отображение значения ключа?)

   -- I do not want to do it like this
    UPDATE variable
     SET type=
      (
        CASE WHEN type='aa1' THEN 'aaa'
        CASE WHEN type='x1' THEN 'bbb'
       END
      )
     WHERE type IN('aa1','x1');

Также я знаю, что мы можемиспользуйте для этого какой-нибудь язык программирования, например jdbc, но я хочу выяснить, существует ли чисто SQL-решение

Заранее спасибо!

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете использовать JOIN:

UPDATE variable v JOIN
       (SELECT 'aa1' as newtype, 'aaa' as oldtype UNION ALL
        SELECT 'x1', 'bbb' UNION ALL
        SELECT 'da1', 'ccc' UNION ALL
        SELECT 'ac1', 'ddd'
       ) v2
       ON v2.oldtype = v.type
    SET v.type = v2.newtype;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...