web-dev-qa-db-ja.com

DB2の選択を使用して更新

2つのテーブルがあります

Table A 
address_id email
12341      [email protected]
12342      [email protected]
12343      [email protected]
12344      [email protected]
12345      [email protected]
12346      [email protected]
12347      [email protected]
12348      [email protected]
12349      [email protected]

Table B 
address_id email
12342      [email protected]
12344      [email protected]
12349      [email protected]

テーブルAのメールを、address_idが一致するテーブルBのメールで更新します。

以下のクエリを試しました:

update TableA A 
set email=(select email from TableB B where A.address_id=B.address_id) 

しかし、address_idがTableAで一致しない場合、すべての電子メールをnullに更新します。

あなたの助けに感謝..

1
Rajasekhar

UPDATE句のないWHEREは、テーブルのすべての行を更新します。テーブルBに一致するaddress_idがない行の場合、サブクエリは空の結果セットを返すため、値はNULLに更新されます。


おそらくもっとエレガントな方法がありますが、これは一致する行のみを更新するはずです。

update TableA A 
set email = (select email from TableB B where A.address_id = B.address_id)
where exists
      (select 1 from TableB B where A.address_id = B.address_id) ;

もう1つのオプションは、MERGEを使用することです。

MERGE INTO TableA AS A
USING
  ( SELECT address_id, email
    FROM TableB
  ) AS B
  ON A.address_id = B.address_id
WHEN MATCHED THEN
  UPDATE SET email = B.email ;
7
ypercubeᵀᴹ