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に更新します。
あなたの助けに感謝..
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 ;