如何在UPDATE语句中结合CASE与SELECT处理未匹配场景?
解决方案
先修正原SQL中的笔误(s.CreateByID应为r.CreateByID),再通过CASE子句处理名称匹配失败的场景,同时完全覆盖原错误的CreateByID值:
UPDATE db.request r SET r.CreateByID = CASE -- 匹配到db.user中对应名称时,取用户ID WHEN EXISTS (SELECT 1 FROM db.user u WHERE r.NameCreateBy = u.Name) THEN (SELECT u.ID FROM db.user u WHERE r.NameCreateBy = u.Name) -- 匹配不到时的自定义处理,示例设为NULL,可根据需求改为默认编码(如-1) ELSE NULL END WHERE r.ID IN (23506);
要点说明
- 原SQL中
set s.CreateByID属于别名错误,需改为目标表的别名r CASE逻辑优先判断是否存在匹配用户,避免子查询重复执行带来的性能损耗- 无论
CreateByID原有值是否错误,都会被新计算的值覆盖,彻底忽略原错误数据
内容的提问来源于stack exchange,提问作者fph
相关产品推荐
相关产品推荐

