如何根据与另一个表中的id列进行比较来更新表中的记录?

时间:2014-10-10 09:26:31

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

两个表格(Table1Table2)都有id列(T1idT2id

Table1开始,我根据条件选择了一些记录(使用了where子句)。现在,我将有一些记录ids

我的目标是Update ids T1id columnTable1 idsT2id column所选的记录Table2 query UPDATE [dbo].[Table1] SET Number = '', StartDate = NULL WHERE T1id IN(SELECT T1id FROM [dbo].[Table1] WHERE DATEDIFF(hour, StartDate, DATEADD(MINUTE, 330, GETUTCDATE())) > 7) T2id column

我尝试了以下Table2

T1id column

如何Table1 T1id与[{1}} T2id进行比较,仅更新Table1的记录 {{1}上述query中的{{1}}中不存在?}感谢。

2 个答案:

答案 0 :(得分:3)

您可以在更新语句中使用联接,因此您可以执行以下操作:

UPDATE  T1
     SET  
     Number = '', StartDate = NULL 
FROM [dbo].[Table1] T1
LEFT OUTER JOIN Table2 T2 ON T1.id = T2.id
     WHERE T2.id IS NULL 
     AND  DATEDIFF(hour, T1.StartDate, DATEADD(MINUTE, 330, GETUTCDATE())) > 7)

答案 1 :(得分:0)

在检查其他表格中的ID时使用Except运算符(表2):

UPDATE [dbo].[Table1]
SET    Number = '',
       StartDate = NULL
WHERE  T1id IN(SELECT T1id
               FROM   [dbo].[Table1]
               --WHERE  Datediff(hour, StartDate, Dateadd(MINUTE, 330, Getutcdate())) > 7) <--Your where cond goes here. 
               EXCEPT
               SELECT T2id
               FROM   [dbo].[Table2])