You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比两张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存在两个问题:

  1. 语法不完整:CASE语句缺少闭合的END,整个UPDATE语句也没有结束分号
  2. 逻辑反转:当匹配到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:52:12