使用内部联接集更新Postgresql
我有两个表,它们共享两个字段(myfield1、myfield2),其中一个表有另外两个感兴趣的字段 以下是我想做的: 1.将两个表连接起来 2.根据afield是否为null,使用另一个表中的字段(afield或另一个字段)更新表2中的列(field1) 下面的代码运行正常,但目标集合字段(field1)没有得到任何更新使用内部联接集更新Postgresql,sql,postgresql,join,case,Sql,Postgresql,Join,Case,我有两个表,它们共享两个字段(myfield1、myfield2),其中一个表有另外两个感兴趣的字段 以下是我想做的: 1.将两个表连接起来 2.根据afield是否为null,使用另一个表中的字段(afield或另一个字段)更新表2中的列(field1) 下面的代码运行正常,但目标集合字段(field1)没有得到任何更新 Update Table2 Set field1 = ( CASE WHEN os.afield is not null
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;
它被称为一个相关子查询,对表2中的每一行执行。但您必须确保子查询返回单行或零行
如果只想更新表1中存在的需要WHERE的行,则此查询将更新表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)
where exists (
select 1 from Table1 os
where fd.myfield1= os.myfield1
AND fd.myfield2 = os.myfield2);
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);