我们可以将多个更新sql合并为一个sql吗?

时间:2018-12-18 09:32:30

标签: mysql sql

我有如下更新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

由于有许多sql,但它们看起来相同,我想知道我们是否可以将其合并为一个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 :(得分:1)

您可以使用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;