mysql - 能否将多个update sql合并为一个sql?

标签 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的解决方案

提前致谢!

最佳答案

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

关于mysql - 能否将多个update sql合并为一个sql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53829988/

相关文章:

mysql - SQL计算共同的多对多关系

MySQL 错误 1241 : Operand should contain 1 column(s)

mysql - SQL 查询(内连接和重复结果)

mysql - 如何提示要在 MySQL 选择查询中使用的索引?

c# - 为什么SQL查询中没有WHERE子句?

mysql - 存储过程在循环中连接选择

mysql - 使用联接删除行并跳过其中一些行 - MySQL

MySQL删除外键错误152

mysql - 从数据库1中选择*并插入到数据库2中

mysql - 使用另一个表数据更新表行