当前位置: 代码迷 >> Sql Server >> 求简单化一条语句
  详细解决方案

求简单化一条语句

热度:63   发布时间:2016-04-24 09:18:21.0
求简化一条语句
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.编号

------解决思路----------------------
引用:
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.编号


------解决思路----------------------
已经很简单了
  相关解决方案