updata table set 状态=case when 种类=‘火车’ and 编号=‘123’ then 1 when 种类=‘汽车’ and 编号=‘458’ then 1 when 种类=‘导弹’ and 编号=‘1578’ then 1 else 状态 end
其实我就是要一次更新这三条记录,三条语句合一条,试了一下这个是全表更新的,效率有点低,求高手简化一下
表结构
id 状态 种类 编号
------解决思路----------------------
效率低不是出在CASE里面,where条件索引OK?
帖执行计划看看为何效率低
------解决思路----------------------
update table
set 状态=1
WHERE (种类='火车' and 编号='123')
OR(种类='汽车' and 编号='458')
OR(种类='导弹' and 编号='1578')
------解决思路----------------------
天啊,然道你想要始终有三条受影响,不管符不符合?
update table
set 状态=case when 种类='火车' and 编号='123' then 1
when 种类='汽车' and 编号='458' then 1
when 种类='导弹' and 编号='1578' then 1
else 状态
end
WHERE 编号 IN('123','458','1578')
------解决思路----------------------
updata table set 状态=case when 种类='火车' and 编号='123’ then 1 when 种类='汽车' and 编号='458’ then 1 when 种类='导弹' and 编号='1578’ then 1 else 状态 end
where 种类='火车' and 编号='123’ or 种类='汽车' and 编号='458’ or 种类='导弹' and 编号='1578’
------解决思路----------------------
2楼的sql 不行吗?
试试这个更灵活一些
update table set 状态=b.状态
from table a join (
select '火车' 种类,'123’ 编号,1 状态
union all
select '汽车' 种类,'458’ 编号,1 状态
union all
select '导弹' 种类,'11578’ 编号,1 状态) b on a.种类=b.种类 and a.编号=b.编号
------解决思路----------------------
不好意思,引号变全角了
update table set 状态=b.状态
from table a join (
select '火车' 种类,'123' 编号,1 状态
union all
select '汽车' 种类,'458' 编号,1 状态
union all
select '导弹' 种类,'11578' 编号,1 状态) b on a.种类=b.种类 and a.编号=b.编号
------解决思路----------------------
已经很简单了