通过JOINS在SQL Server中更新查询

时间:2015-09-07 04:24:19

标签: sql-server-2008

我有2个表,如下所述

create table #temp(id int, userid int,age int) 

insert into #temp values (1,1,1)
insert into #temp values(2,1,2)
insert into #temp values(3,1,3)

create table #tempMOCK(id int, userid int,age int) 
insert into #tempMOCK values (6,1,7)
insert into #tempMOCK values (7,1,9)

我想在#temp表上更新Mock表的前两行。我期待那个年龄的rowid 2& 3应该成为7& 9.我正在使用此查询但不知何故它不起作用。

UPDATE t1
SET    t1.age = t2.age
FROM   #temp t1
INNER JOIN #tempMOCK t2 ON t1.userid = t2.userid where t1.id in (1,2)

2 个答案:

答案 0 :(得分:0)

由于用户ID在所有行中都相同,因此您可以获得相同的年龄值 这可以使用CTE来解决,如下所示:

;with cte as 
(
  select id, userid, age, ROW_NUMBER() OVER(order by id) rn
  FROM #tempMock
)
UPDATE t1
SET    t1.age = t2.age
FROM   #temp t1
INNER JOIN cte t2 ON t1.userid = t2.userid and t1.id = t2.rn+1;

see fiddle here

答案 1 :(得分:0)

您可以尝试以下查询:

UPDATE #temp1 set age=(Select t2.age from #tempMOCK t2 
where t2.userid=#temp1.userid) where id in (1,2)

希望有所帮助