更新id与其他2表不匹配的第三个表

时间:2017-08-22 14:00:05

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

我有3张桌子

表A

ID  Remark  
1   NULL    
2   Null    
4   Null

表B

ID  Remark  
1   Null    
2   Null    
4   Null    

表C

ID      
1   
2   
3   

我想通过加入表A和表C来更新表B备注,其中表C中不存在表A中的记录。

所以最终的输出看起来像

表B

ID  Remark  
1   Null    
2   Null    
4   Invalid Entry   

到目前为止,我已经尝试过查询:

Update TableB set Remark='Invalid'
where not exists ( select ID from TableA join TableC on  TableA.ID=TableC.ID)

但我认为存在一些问题。有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

您忘记将TableB连接到存在

Update TabB
set Remark='Invalid'
from TableB TabB
where not exists 
(
select 1 
from TableA 
join TableC 
on  TableA.ID=TableC.ID 
where TabB.id = TableA.id
)

答案 1 :(得分:1)

我想你想要not in

Update TableB
    set Remark = 'Invalid'
    where id not in (select a.ID from TableA a join TableC c on a.ID = c.ID);

或者,您希望在idTableA都不同时更新TableC。我发现这更容易理解:

Update b
    set Remark = 'Invalid'
    from TableB b
    where not exists (select 1 from TableA a where a.id = b.id) and
          not exists (select 1 from TableC c where c.id = b.id) ;