使用Join和Computed Column更新表

时间:2014-04-25 20:20:25

标签: sql sql-server join sql-update

我有2个以下结构的表

表1
Id(长),Name(nvarchar),ValuesExist(位)

表2
Id(长),Table1Id(长),值(int)

在Table.Id和Table2.Table1Id

上使用外键约束

现在我想根据以下逻辑更新Table1

如果(Table2中的值对应于行Table1和Atleast one,值为> 0)
然后 Table1.ValuesExist = 1
else Table1.ValuesExist = 0

我已经查看并尝试了很多关于如何使用join更新列的示例,但是cudnt找到了通过逻辑或某些ComputedColumn进行更新的任何示例

2 个答案:

答案 0 :(得分:1)

UPDATE T1
SET ValuesExist = 
  CASE 
     WHEN T2.Value > 0 THEN 1
     ELSE 0
  END
FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.Id = T2.Table1Id

答案 1 :(得分:0)

这是一种方法。它使用update中的相关子查询,并且非常接近您所说的问题:

update table1 t1
    set ValuesExist = (case when exists (select 1
                                         from Table2 t2
                                         where t2.Table1Id = t1.Id and t2.Value > 0
                                        )
                            then 1 else 0
                       end);

如果您有Table2(Table1Id, Value)的索引,这将表现最佳。