我需要更新SQL Server 2008 R2中的表列。更新取决于另一个表中的两列。
表1:
id1 (varchar(20)) id2 (varchar(20)) value (bit) name_without_this_id1_id2
--------------------------------------------------------------------------
58 669 null null
188 875 null null
87 30 null null
表2:
id0 (int) id1 (varchar(20)) id2 (varchar(20)) name(varchar(10))
---------------------------------------------------------------
1 58 669 ab
2 87 30 ac
3 58 669 ab
更新表1后,我可以得到:
id1 (varchar(20)) id2 (varchar(20)) value (bit) name_without_this_id1_id2
--------------------------------------------------------------------------
58 669 1 ac
188 875 0 ab,ac
87 30 1 ab
关于" name_without_this_id1_id2",如果id2和id2的组合在table2的id1和id2中不可用,则列" name"的值在table2需要添加到列" name_without_this_id1_id2"在表1中。这意味着id1和id2组合不适用于列" name" =" ac"在表2中。
答案 0 :(得分:0)
检查另一个表中是否存在匹配列的一种方法是使用EXISTS()
函数。
下面的代码应该可以使用
update table1 set value = 1
where exists( select 1 from table2 where table1.id1 = table2.id1 );
如果子查询返回任何行,则此函数返回TRUE
。
答案 1 :(得分:0)
您可以在update命令中使用联接来更新table2中存在的所有ID(您也可以使用exists
而不是join):
update table1
set value= 1
from table1 join table2 on table1.id1=table2.id1 and table1.id2=table2.id2
最后将空值设置为0(它们不在table2中的ID):
update table1
set value=0
where value is null