带连接和案例条件的SQL Update

时间:2012-06-26 05:32:06

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我想更新一张桌子。

我的表结构是:

  • MainTable

    id | status | type | user
    
  • OtherTable

    id | flag
    

在此,我要更新status的所有userMainTable字段,排除status='Stop'以及flag未设置OtherTable的位置,即0,但是怎么样?

OtherTable仅保留type='EMP'的值。

更新:我想在MainTable

时通过条件检查更新所有type ='EMP'条记录

3 个答案:

答案 0 :(得分:1)

Update MT set user='someuser', status = "somestatus" 
FROM MainTable MT
Join
(
Select * 
from MainTable MT1
Join Othertable OT on MT1.Id = OT.Id
AND OT.Flag = 0
and  MT1.type='EMP'
Union All
Select * 
from MainTable MT2
WHERE MT2.id not in (Select ID FROM Othertable where Flag = 0)
and  MT2.type='EMP'
) tblOther
on MT.ID = tblOther.ID

答案 1 :(得分:1)

智能答案由@Asif给出

这是适合我要求的更简单/替代方式


 `update MainTable
  set status='someStatus'
  where 
  status!='Stop'
  and check_type!='EMP'

  update MainTable
  set status='someStatus'
  from MainTable inner join OtherTable on OtherTable.id=MainTable.id
  where 
  OtherTable.flag=1` 

答案 2 :(得分:0)

使用子查询......

Update MainTable Set user="" where status='STOP' and id in (select id from OtherTable 
where Flag!=0)