mysql - 我们可以将多个更新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 解决方案
提前致谢!
解决方案
您可以使用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;
推荐阅读
- python - Pandas DataFrame:根据条件识别异常值并替换数据框中的值
- selenium - 处理“内部”滚动条时如何滚动到视图中
- tensorflow - 使用 TPU 训练 MNIST 会产生错误
- sql-server - SQL LEFT JOIN SUM 一对多
- excel - 升级到 Office 2013 后如何在任务计划程序中使用 Excel VBA 发送 Outlook 项目?
- docker - 父 docker 容器不会停止,我需要访问终端并运行我的命令
- python - 有限浮点小数点不四舍五入
- sql - 修剪,左,右,中?
- google-bigquery - 如果查询多个表,如何优化 bigquery?
- python - 将上下文向下传递函数的干净方法是什么?