2014-10-28 81 views
0

我有兩個表,他們共享兩個字段(myfield1,myfield2)和兩個表中的其中一個有兩個其他感興趣的領域。Postgresql更新使用內部聯接集

這是我想做的事: 1.內加入表2中的兩個表 2.更新一列(字段1)與任一領域(或更遠anotherfield)從另一臺視遠處爲空或不是。

下面的代碼運行良好,但目標設置字段(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; 

回答

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中的每一行執行相關子查詢。但是你必須確定子查詢返回單行或零行。

此查詢,如果您想更新只存在於表1行,你需要一個WHERE

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); 
將更新表2中的所有行