我有两个表共享两个字段(myfield1,myfield2),其中一个表有两个其他感兴趣的字段。
这是我想要做的: 1.内部加入两个表 2.使用其他表中的字段(afield或otherfield)更新Table2中的列(field1),具体取决于是否为null。
下面的代码运行正常,但目标设置字段(field1)没有得到任何更新。
Update Table2
Set field1 = (
CASE
WHEN os.afield is not null
THEN (os.afield)
Else os.anotherfield
End
)
from Table1 os
inner join Table2 fd
ON fd.myfield1= os.myfield1
AND fd.myfield2 = os.myfield2;
答案 0 :(得分:2)
Update Table2 fd
Set fd.field1 =
(select CASE WHEN os.afield is not null THEN (os.afield) Else os.anotherfield End
from Table1 os
where fd.myfield1= os.myfield1
AND fd.myfield2 = os.myfield2);
它被称为相关子查询,它对表2中的每一行执行。但是您必须确保子查询返回单行或零行。
如果您只想更新Table1中存在的那些需要WHERE的行,那么此查询将更新Table2中的所有行
Update Table2 fd
Set fd.field1 =
(select CASE WHEN os.afield is not null THEN (os.afield) Else os.anotherfield End
from Table1 os
where fd.myfield1= os.myfield1
AND fd.myfield2 = os.myfield2)
where exists (
select 1 from Table1 os
where fd.myfield1= os.myfield1
AND fd.myfield2 = os.myfield2);