首页 > 解决方案 > 我们可以将多个更新sql合并为一个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 解决方案

提前致谢!

标签: mysqlsql

解决方案


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

推荐阅读