根据SQL Server 2008 R2上的另一个表中是否显示两个列值来更新表

时间:2015-05-17 00:29:06

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

我需要更新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中。

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