如何通过关联两个独立表更新临时表的指定列?
问题根因
- 核心问题是表关联规则缺失:你在FROM子句中使用逗号分隔
@tempUsers t和Users U,属于隐式笛卡尔连接语法,没有指定两张表的匹配条件,最终会生成两张表全量行的交叉乘积,完全无法将临时表的行和Users、PhoneCodes表的对应业务数据匹配,自然取不到正确的PC.Code值。 - 隐性的语法风险:逗号分隔的隐式连接语法已不推荐使用,很容易因为漏写关联条件导致逻辑错误,使用显式JOIN语法可以有效避免这类问题。
修复方案
首先需要补充@tempUsers和Users表的业务关联条件(通常为用户唯一标识字段,示例中假设关联字段为UserId,请替换为你实际业务中的关联字段),修正后的语句如下:
UPDATE t SET t.ContactCode = PC.Code FROM @tempUsers t -- 补充临时表和Users表的显式关联条件 INNER JOIN Users U ON t.UserId = U.UserId LEFT JOIN PhoneCodes PC ON U.ContactCodeId = PC.PhoneCodes_Id
如果业务上确认Users表的ContactCodeId都存在对应的PhoneCodes记录,也可以将LEFT JOIN改为INNER JOIN,仅更新有匹配PhoneCode的行,避免出现无匹配时的null值。
内容的提问来源于stack exchange,提问作者Pranav Harshe
相关产品推荐
相关产品推荐

