选择中的SQL更新+此选择的Where条件

时间:2015-03-27 14:25:47

标签: sql sql-update

我想做这样的事情:

With T2 as (
    Select * 
    From TABLE t
    Where t.a1=2
)
Update T1
  Set T1.X = T2.X
  Where T1.Y = T2.Y
;

我在update From子句中选择了一个解决方案,但我仍然需要创建Where条件。 所以我想做的另一种选择是:

Update T1
  Set T1.X = T2.X
  From (
    Select * 
    From TABLE t
    Where t.Z=2
  ) T1
  Where T1.Y = T2.Y
;

这就是理论,实际上我的两个例子都不起作用。 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

我认为这正是您所寻找的:

update TABLE
    set X = t.X
from TABLE T1
    join (select * from TABLE T2 where T2.a1=2) t on t.Y=T1.Y
where T1.Z=2

答案 1 :(得分:0)

如果没有数据库规范,您可以使用相关子查询执行此操作:

update t1
    set x = (select t2.x from table t2 where t2.y = t.y and t2.z = 2);

这应该适用于任何数据库,假设子查询不返回多行(如果是这种情况,您可以添加fetch first 1 row onlylimittop或类似的东西)