我有2张桌子
Table A
address_id email
12341 aba@mail.com
12342 abb@mail.com
12343 abc@mail.com
12344 abd@mail.com
12345 abe@mail.com
12346 abf@mail.com
12347 abg@mail.com
12348 abh@mail.com
12349 abi@mail.com
Table B
address_id email
12342 xyz@mail.com
12344 xyy@mail.com
12349 xyx@mail.com
Run Code Online (Sandbox Code Playgroud)
我想用表 B 中 address_id 匹配的电子邮件更新表 A 中的电子邮件。
我试过下面的查询:
update TableA A
set email=(select email from TableB B where A.address_id=B.address_id)
Run Code Online (Sandbox Code Playgroud)
但是它将所有电子邮件更新为 null,其中 address_id 在 TableA 中不匹配。
感谢你的帮助..
一个UPDATE
withoutWHERE
子句将更新表的所有行。对于那些address_id
在 table 中没有匹配项的行,B
子查询返回一个空结果集,因此该值更新为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) ;
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用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 ;
Run Code Online (Sandbox Code Playgroud)