我有一个更新 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/