2013-05-28 52 views
1

我有兩個表T1和T2(Sql Server 2008)。從另一個表更新而不用重複計算

在T2我沒有名稱信息。在T2中填充它的最佳方式是什麼?

如果我在兩個表上進行連接,我會在T2中獲得雙重計數,因爲同一個ID(06)會在T1中出現兩次。 所以最好做一個更新,但是什麼是正確的語法? 謝謝你的建議。

T1 
Name/ID/car/Country 
Joe/06/BMW/Italy 
Joe/06/WW/Italy 
Tim/07/Jag/Spain 


T2 
Name/ID/Country 
NULL/06/NULL 
NULL/07/NULL 

結果應該是:

T2 
Name/ID/Country 
Joe/06/Italy 
Tim/07/Spain 
+0

最好幾乎總是不存儲兩份相同的數據。假設你知道你在做什麼,UPDATE FROM查詢已經發布爲答案應該做你的出價。 –

回答

2

SQL Server的專有UPDATE ... FROM語法可以用於此目的。

UPDATE T2 
SET T2.Name = T1.Name, 
    T2.Country = T1.Country 
FROM T2 JOIN T1 ON T1.ID = T2.ID 

如果T1存在特定ID的任意一個將有所回升多個行(這constrasts與MERGE這將一個錯誤中止事務上發現這一點)

編輯:我不是完全可以肯定的是,它在任何地方記錄在上面的兩列都是從源碼中同一行更新的。在實踐中,我確信這將是這種情況,但不依賴於此的方式(執行計劃使用無證的ANY aggregate)。

;WITH T AS 
(
SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Country, Name) AS RN 
FROM T1  
) 
UPDATE T2 
SET T2.Name = T.Name, 
    T2.Country = T.Country 
FROM T2 JOIN T ON T.ID = T2.ID 
WHERE T.RN = 1