【问题标题】:Postgresql Update using Inner Join set使用内部连接集的 Postgresql 更新
【发布时间】:2014-12-24 06:19:08
【问题描述】:

我有两个表,它们共享两个字段(myfield1、myfield2),两个表中的一个有另外 2 个感兴趣的字段。

这是我想做的: 1.Inner Join 两张表 2. 根据字段是否为空,使用另一个表中的字段(字段或另一个字段)更新表 2 中的列(字段 1)。

下面的代码运行良好,但目标设置字段 (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;

【问题讨论】:

    标签: sql postgresql join case


    【解决方案1】:
    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2019-06-25
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2012-12-05
      相关资源
      最近更新 更多