如何批量更新SQL中多条记录的不同UniqueRef值
批量更新SQL表多条不同值记录的方案
要批量更新不同UniqueRef对应的记录(不用逐条写UPDATE),这里提供两种适配大部分主流数据库的实用方案:
方案一:使用CASE WHEN语句
适合更新记录数量较少的场景,直接在UPDATE语句中通过条件判断赋值:
UPDATE 你的表名 SET Name = CASE UniqueRef WHEN 1101 THEN '1101AB' WHEN 1102 THEN '1102CD' WHEN 1103 THEN '1103EF' ELSE Name -- 保留不需要更新的记录的原Name值 END WHERE UniqueRef IN (1101, 1102, 1103); -- 限定更新范围,避免全表扫描
注意:WHERE子句必须加上,否则会触发全表更新,未匹配的记录虽然ELSE Name不会改变值,但会浪费数据库资源。
方案二:表值构造器+JOIN更新
适合更新记录较多的场景,将待更新的键值对集中管理,逻辑更清晰:
MySQL 示例
UPDATE 你的表名 t JOIN ( VALUES (1101, '1101AB'), (1102, '1102CD'), (1103, '1103EF') ) AS temp(UniqueRef, NewName) ON t.UniqueRef = temp.UniqueRef SET t.Name = temp.NewName;
SQL Server/PostgreSQL 示例
WITH temp AS ( SELECT * FROM ( VALUES (1101, '1101AB'), (1102, '1102CD'), (1103, '1103EF') ) AS x(UniqueRef, NewName) ) UPDATE 你的表名 t SET Name = temp.NewName FROM temp WHERE t.UniqueRef = temp.UniqueRef;
后续需要新增更新记录时,直接在VALUES块中添加新的键值对即可,维护成本更低。
内容的提问来源于stack exchange,提问作者user11148700
相关产品推荐
相关产品推荐

