2009-02-19 49 views
2

我試圖根據表中的不同列是否位於表b的一組結果中來更新表a中的一列。目前的變化如下:檢查SQL CASE語句中是否存在

update a 
set a.field1 = 
case 
when exists (
    select b.field2 
    from b 
    where b.field2 = a.field2 
) 
then 'FOO' 
else 'BAR' 
end 

未運行。任何想法如何爲DB2數據庫執行此操作?

編輯:謝謝您的回答,盡我所能做的就是

update a set field1 = 'FOO' where field2 in (select field2 from b); 

update a set field1 = 'BAR' where field2 not in (select field2 from b); 

但我會離開,以防有人這個開放可以在該作品上找到一個版本的代碼。

回答

3

這適用於SQLServer。也許DB2有類似的構造。

update a SET field1 = 'BAR' 
from a 
    left outer join b on b.field1 = a.field1 
where b.field1 is null; 
update a SET field1 = 'FOO' 
from a 
    inner join b on b.field1 = a.field1 

問候,
利芬

+0

哇...不必要的更新蝙蝠俠! – 2009-02-19 15:00:12

+0

@Tom。這應該解決它。 – 2009-02-19 15:16:04

0

a.field1第一次出現的應該是a.field2。

你說:「在表中的不同列是否是一組......」

您的代碼修改同一列,而不是不同的列。

0

我不是SQL或DB2的專家,但也許你可以加入這兩個表並檢查b.field1是否爲空?

update a 
set a.field1 = case when b.field1 is not null then 'FOO' else 'BAR' end 
from a full outer join b on a.field1 = b.field1 
6

我使用DB2 for iSeries框。試試這個:

update a 
set a.field1 = 
Coalesce((select 'FOO' 
      from b 
      where b.field2 = a.field2), 
         'BAR') 

Coalesce()是返回的第一個非空列表中的一個功能。