T-sql仅在与连接表1到1匹配时更新

时间:2012-01-22 18:24:15

标签: sql-server-2008 tsql

如何根据连接表中的值有效地更新表 只有当ID - 我用来连接两个表的标识符完全匹配时 1到1.我的意思是当连接表只有一个ID到更新的表?

DECLARE @T1 TABLE (
  ID INT,
  NAME VARCHAR(10),
  Age int
)
INSERT INTO @T1 VALUES (1, 'Name', null)

DECLARE @T2 TABLE (
  ID INT,  
  Age int
)
INSERT INTO @T2 VALUES (1, 28)
INSERT INTO @T2 VALUES (1, 29)
INSERT INTO @T2 VALUES (1, 30)

在此示例中,表T2具有ID = 1的三​​个记录,其对应于一个ID 在T1。

我想仅在T2中有一条ID = 1的记录时才更新T1。

(我想避免加入两次表t2来解决这个问题...)

谢谢!

1 个答案:

答案 0 :(得分:4)

;WITH T2
     AS (SELECT ID,
                MAX(Age) AS Age
         FROM   @T2
         GROUP  BY ID
         HAVING COUNT(*) = 1)
UPDATE @T1
SET    [@T1].Age = T2.Age
FROM   @T1
       JOIN T2
         ON [@T1].ID = T2.ID