如何用CASE语句优化多条件多字段的evtentries表批量更新?
批量更新SQL语句优化:同时用CASE处理多字段更新
你可以给ediv字段也套一层CASE逻辑,和ro字段的写法一致,就能在同一条UPDATE语句里完成两个字段的批量更新。
原始单条更新语句(需执行300+次)
update evtentries set ro = '1', ediv = 'A' where entid = '1234' and ID = '10024' update evtentries set ro = '2', ediv = 'B' where entid = '5678' and ID = '10024'
你当前的尝试代码
update evtentries set ro = CASE WHEN entid = '1234' THEN '1' WHEN entid = '5678' THEN '2' ELSE ro END , ediv = 'A' <---- need to update with the case WHERE entid IN ('1234', '5678') and ID = '10024'
优化后的批量更新语句
update evtentries set ro = CASE WHEN entid = '1234' THEN '1' WHEN entid = '5678' THEN '2' ELSE ro END , ediv = CASE WHEN entid = '1234' THEN 'A' WHEN entid = '5678' THEN 'B' ELSE ediv END WHERE entid IN ('1234', '5678') and ID = '10024'
说明
- 给
ediv字段添加对应的CASE判断,匹配entid设置对应的值 ELSE ro和ELSE ediv是为了保证不匹配的记录,对应字段保留原有值,不会被误修改- 原本需要数百次执行的UPDATE操作,现在只需执行一次,大幅减少数据库请求次数
内容的提问来源于stack exchange,提问作者H.L.
相关产品推荐
相关产品推荐

