基于来自多个表SQL Server 2005,2008的数据更新单个表

时间:2013-05-16 20:09:29

标签: sql sql-server-2008 sql-server-2005

我需要使用表one中的数据更新表two。表1和表2与任何常用列无关。表格three与表格two相关。

Ex:表一(reg_det表)

reg_det_id | reg_id | results
101        | 11     | 344

表二:(临时表)

venue                    | results
Anheim convention center | 355

表三(regmaster-tbl)

reg_id| venue
11    | Anaheim convention center

我需要使用表二中的数据更新表一中的结果列。但是第一和第二表没有关系。如上所示,表二和三以及表一和三是相关的。任何人都可以建议任何想法!我需要在表1中将结果值设置为355,并且此数据来自表2,但这两个是无关的,并且可以使用表3来关联它们。对不起,如果它令人困惑!

3 个答案:

答案 0 :(得分:13)

相当直接:

UPDATE T1
SET result = t2.results
FROM [table one] T1
INNER JOIN [table three] t3
 on t1.reg_id = t3.reg_id
INNER JOIN [table two] T2
 on t2.venue = t3.venue

答案 1 :(得分:5)

几乎是一个问题而不是答案。 :)

你不能使用隐含的内连接吗?

UPDATE rd
   SET rd.results = tt.results
  FROM reg_det rd, regmaster rm, temptable tt
 WHERE rm.reg_id = rd.reg_id
   AND rm.venue = tt.venue;

我发现它更容易阅读,这种语法在SELECT语句中有效,与显式内连接具有相同的含义。

答案 2 :(得分:1)

试试这个:

UPDATE rd
SET rd.results = t.results
FROM reg_det rd
JOIN regmaster rm ON rm.reg_id = rd.reg_id
JOIN temptable t ON t.venue = rm.venue
WHERE t.results = 355

我添加了一个WHERE子句,否则它将更新regmaster和temptable中匹配的所有reg_det记录。