对于联接表中不存在的行,如何将空值更新为0?

问题描述

我有2张桌子。

requests
id|code|count|


oldrequests
id|code|count|

我需要从 oldrequests 更新 requests 中的 count 。我试图用Coalesce(oldrequests.count,0)更新NULL count 值的主要问题是这样的:

update request req
set count = coalesce(oldreq.count,0)
from oldrequests oldreq
where req.code = oldreq.code

但是请求中的NULL值未更新。 然后我尝试将NULL值设置为0,如下所示:

update request req
set count = 0
from oldrequests oldreq
where req.code = oldreq.code and oldreq.id is null

但这对我也没有帮助。 如何更新值和NULL值?

解决方法

我的意思是问题是oldrequests表中行的更新计数不匹配。我可以建议采用以下解决方案:

通过requests更新0表中的所有计数,并在更新后匹配oldrequests表中的行计数,例如:

update requests set count = 0;

update requests req
set count = coalesce(oldreq.count,0)
from oldrequests oldreq
where req.code = oldreq.code;

为不匹配的行设置了0的另一种方法:

update requests set count = 0
where (select code from oldrequests where oldrequests.code = requests.code) is null;

db<>fiddle

或使用not exist子句的另一个版本:

update requests set count = 0
where not exists (
    select code from oldrequests where oldrequests.code = requests.code
);

db<>fiddle