1

我有两个表,T1 和 T2(Sql Server 2008)。

在 T2 中,我没有名称信息。在 T2 中填写它的最佳方法是什么?

如果我对这两个表进行连接,我会在 T2 中为 Joe 获得双重计数,因为相同的 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
4

1 回答 1

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则将选择任意行(这与MERGE它将中止事务并在查找此内容时出错)

编辑:我不完全确定它记录在任何地方,上面两列都是从源中的同一行更新的。在实践中,我确信会是这种情况,但一种不依赖于此的方式(执行计划使用未记录的ANY聚合)会是。

;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
于 2013-05-28T12:41:50.753 回答