2015-07-10 58 views
2

我有一个select通过连接使用两个表。我需要使用第二个表字段更新第一个表。选择如下 使用连接更新单个表

select R.f1, Z.f2,R.f3 
FROM 
(select * From Table1 where f2<>'xx' and f3='z') R inner join 
(select * From Table2 where f3='xx')    Z 
ON R.f1⁼Z.f1 and R.f4=Z.f4 

我怎么可以更新对应于同样的选择Table(SET R.f2 = Z.f2)的?

UPDATE 

(select * From Table1 where f2<>'xx' and f3='z') R inner join 
(select * From Table2 where f3='xx')    Z 
ON R.f1⁼Z.f1 and R.f4=Z.f4 
SET R.f2=Z.f2 

当我想,我得到的回应是

的UPDATE的目标表R是不可更新

回答

1

您可以使用使用以下update语句的加入。 ...

update t 
    set t.Column = value 
    from Table t 
inner join OtherTable ot on t.Id = ot.TID 
where somecondition = true. 
1

您应该在table1上执行更新并将其加入第二个子查询。来自第一个子查询的table1的条件可以应用于where子句中:

UPDATE table1 r 
JOIN (SELECT * FROM table2 WHERE f3 = 'xx') z ON r.f1 ⁼ z.f1 AND r.f4 = z.f4 
SET r.f2 = z.f2 
WHERE r.f2 <> 'xx' AND r.f3 = 'z'