2012-01-22 7 views
1

結合テーブルの値に基づいてテーブルを効率的に更新する方法 両方のテーブルを結合するID識別子が完全に一致する場合のみ 1対1私は結合されたテーブルが更新されたテーブルにIDを1つだけ持っていることを意味しますか?この例ではテーブルT2にT-SQLは、結合されたテーブルと1対1で一致する場合のみ更新します

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) 

はT1に1つのID に対応するID = 1の3つのレコードを有します。

そしてT2に= 1

(私は...このタスクを解決するために二回、テーブルT2を結ぶ避けたい)

IDの一つのレコードがある場合にのみ、私はT1を更新したいと思いますありがとう!

+0

3人から1人が参加しますか? –

+0

@OlegDok - それらのどれも。 –

答えて

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 
+0

+1エレガント..... –

関連する問題