问题描述
我有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;
或使用not exist
子句的另一个版本:
update requests set count = 0
where not exists (
select code from oldrequests where oldrequests.code = requests.code
);