如何对比两张SQL Server表并更新TableB的Synch列
TableB数据更新SQL语句修复方案
表结构说明
TableA结构
GID Type --------------- KLMOE mb IENOL mb-sd OLEOE od OELCJ mb-sd
TableB初始结构
GID Synch --------------- KLMOE IENOL OLEOE OELCJ
需求说明
通过GID字段关联两张表,更新TableB的Synch字段:
- 当TableA对应GID的
Type为mb-sd时,TableB的Synch设为NO - 其他类型(如mb、od等),TableB的
Synch设为YES
预期更新后的TableB:
GID Synch --------------- KLMOE YES IENOL NO OLEOE YES OELCJ NO
原语句问题分析
你编写的SQL存在两个问题:
- 语法不完整:
CASE语句缺少闭合的END,整个UPDATE语句也没有结束分号 - 逻辑反转:当匹配到
mb-sd类型时,你设置的是YES,但需求要求此时设为NO
修正后的SQL写法
写法一:修正原CASE语句逻辑与语法
UPDATE TableB SET Synch = CASE WHEN EXISTS ( SELECT 1 FROM TableA WHERE TableA.GID = TableB.GID AND TableA.[Type] = 'mb-sd' ) THEN 'NO' -- 匹配mb-sd时设为NO ELSE 'YES' -- 其他情况设为YES END; -- 补全语法闭合与结束分号
写法二:使用JOIN关联更新(更高效)
如果两张表的GID是一一对应关系,用JOIN写法更清晰高效:
UPDATE TableB SET Synch = CASE WHEN TableA.[Type] = 'mb-sd' THEN 'NO' ELSE 'YES' END FROM TableB JOIN TableA ON TableB.GID = TableA.GID;
内容的提问来源于stack exchange,提问作者aasenomad
相关产品推荐
相关产品推荐

