我有如下更新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解决方案
谢谢!
答案 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;